je quelque chose comme ça dans mon code:« symbole externe non résolu » sur la spécialisation de modèle pour tableau de char
template <typename T>
struct A
{
void Print();
};
template <>
struct A<char*>
{
void Print() { printf("Char*!\n"); }
};
template <typename T>
void DoSomething(T& lol)
{
A<T> a;
a.Print();
}
int main()
{
char a[5];
DoSomething(a);
}
Et cela produit l'erreur de liens suivant:
error LNK2019: unresolved external symbol "public: void __thiscall A<char [5]>::Print(void)" ([email protected][email protected][email protected]@QAEXXZ) referenced in function "void __cdecl DoSomething<char [5]>(char const (&)[5])" ([email protected][email protected]@[email protected])
Quel type dois-je spécialiser le modèle A pour, afin que je puisse l'utiliser avec un tableau de char? J'ai essayé const char*
et d'autres combinaisons de const, char, * et &, et rien ne fonctionne.
Notez que je ne peux pas modifier la fonction DoSomething
.
Aussi, si possible, je voudrais que le compilateur déduise automatiquement (ou convertisse) le type de modèle sans le spécifier dans l'appel DoSomething<smth>()
dans main()
.
Que faire si je ne peux pas (ou ne veux vraiment, vraiment pas) effectuer la conversion de tableau en pointeur? – GhassanPL
@Kronikarz: Ensuite, vous devez spécialiser le modèle pour un type de tableau. –