2013-04-30 41 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