我需要你的帮助来设置一个带有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&lt; 2&gt;(class std :: basic_string,class std :: allocator&gt;(&amp;)[2],int,class cocos2d :: CCPoint )“(?? $ initWithFilesArray @ $ 01 @ SpriteSwitcher @@ QAE_NAAY01V?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@ HVCCPoint @ cocos2d @@@ Z)”在Funktion“”public:virtual bool __thiscall MenuScreen :: init(void)“(?init @ MenuScreen @@ UAE_NXZ)”。
任何人都可以帮助我,并告诉我问题出在哪里?
答案 0 :(得分:0)
您的函数是一个模板,这意味着该定义必须在实例化点可见。这意味着要么将您的定义移动到头文件中,要么明确地将其实例化为您希望发生的所有N值。如果你希望N总是小于10左右,这可能是实用的。否则,您需要将定义放在头文件中,以便在与正确的模板参数一起使用时进行实例化。