This question already has answers here:
Why can templates only be implemented in the header file?
(16个回答)
6年前关闭。
我需要您为带有int值的模板的参数化提供帮助。
那就是它的样子:
SpriteSwitcher.h:
SpriteSwitcher.cpp:
然后我尝试使用initWithFileArray函数初始化SpriteSwitcher类
我收到以下错误:
错误lnk2019无法解析的外部符号““ public:bool __thiscall SpriteSwitcher :: initWithFilesArray (class std :: basic_string,class std :: allocator>(&)[2],int,class cocos2d :: CCPoint)”(?? $“ Initial”中的$ initWithFilesArray @ $ 01 @ SpriteSwitcher @@ QAE_NAAY01V?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@ HVCCPoint @ cocos2d @@@@ :虚拟布尔__thiscall MenuScreen :: init(void)“(?init @ MenuScreen @@ UAE_NXZ)”。
谁能帮助我,告诉我问题出在哪里?
(16个回答)
6年前关闭。
我需要您为带有int值的模板的参数化提供帮助。
那就是它的样子:
SpriteSwitcher.h:
template<int N >
bool initWithFilesArray(std::string (&fileNames)[N],int width, const CCPoint position);
SpriteSwitcher.cpp:
template<int N >
bool SpriteSwitcher::initWithFilesArray(std::string (&fileNames)[N], int width, const CCPoint position)
{
return true;
}
然后我尝试使用initWithFileArray函数初始化SpriteSwitcher类
std::string g[2] = {"hello", "world"};
SpriteSwitcher *s = new SpriteSwitcher();
s->initWithFilesArray(g, visibleSize.width, origin);
我收到以下错误:
错误lnk2019无法解析的外部符号““ public:bool __thiscall SpriteSwitcher :: initWithFilesArray (class std :: basic_string,class std :: allocator>(&)[2],int,class cocos2d :: CCPoint)”(?? $“ Initial”中的$ initWithFilesArray @ $ 01 @ SpriteSwitcher @@ QAE_NAAY01V?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@ HVCCPoint @ cocos2d @@@@ :虚拟布尔__thiscall MenuScreen :: init(void)“(?init @ MenuScreen @@ UAE_NXZ)”。
谁能帮助我,告诉我问题出在哪里?
最佳答案
您的函数是一个模板,这意味着定义必须在实例化点可见。这意味着将您的定义移到头文件中,或者为您希望发生的所有N值显式实例化它。如果您希望N始终小于10左右,则可能是可行的。否则,您需要将定义放入头文件中,以便与正确的模板参数一起使用时可以实例化该定义。
09-25 17:10