我的代码中有这样的东西:
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);
}
这会产生以下链接器错误:
error LNK2019: unresolved external symbol "public: void __thiscall A<char [5]>::Print(void)" (?Print@?$A@$$BY04D@@QAEXXZ) referenced in function "void __cdecl DoSomething<char [5]>(char const (&)[5])" (??$DoSomething@$$BY04D@@YAXAAY04$$CBD@Z)
我应该将 A 模板专门用于什么类型,以便可以将它与字符数组一起使用?我尝试const char*
了 const、char、* 和 & 的其他组合,但没有任何效果。
请注意,我无法更改DoSomething
功能。
另外,如果可能的话,我希望编译器自动推断(或转换)模板类型,而不在DoSomething<smth>()
调用中指定它main()
。