2013-04-30 38 views
1

我需要您的帮助,使用int值对模板进行参数化。C++模板参数从数组维度中扣除

这就是它的样子:

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解析外部符号 “” 公共:布尔__thiscall SpriteSwitcher :: initWithFilesArray < 2>(类的std :: basic_string的,类的std ::分配器>(&)[2] ,int,class cocos2d :: CCPoint)“(?? $ initWithFilesArray @ $ 01 @ SpriteSwitcher @@ QAE_NAAY01V?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@ HVCCPoint @ function“”public:virtual bool __thiscall MenuScreen :: init(void)“(?init @ MenuScreen @@ UAE_NXZ)”。

任何人都可以帮助我,并告诉我问题在哪里?

+2

你的问题不是类型扣除。你得到的是一个链接错误。看到链接问答 – 2013-04-30 19:55:24

回答

0

你的函数是一个模板,这意味着定义必须在实例化点可见。这意味着要么将您的定义移动到您的头文件中,要么显式实例化它,以获得您希望发生的所有N值。如果你期望N总是小于10左右,这可能是实际的。否则,您需要将定义放入头文件中,以便在与正确的模板参数一起使用时可以对其进行实例化。

+0

Thx,修复它:)。 – 2013-04-30 20:19:51