2014-03-26 58 views
0

我在使用的連接器問題。鏈接錯誤模板方法

它給了我下面的錯誤:

[Linker error] undefined reference to `bool Polis :: deleteEdifice <Mine> (int) ' 

原型聲明如下:

template <typename T> bool deleteEdifice(int); 

deleteEdifice是空的,不,現在做任何事情,但它不工作。

原型的調用是:

obj->deleteEdifice<Mine>(3); 

我也試着這樣做:

obj->template deleteEdifice<Mine>(3); 

打印以下錯誤:

`template' (as a disambiguator) is only allowed within templates 

你能告訴我我是什麼做錯了。

+0

‘deleteEdifice是空的,不,現在做任何事情,但它不工作。’請澄清。這是什麼意思?有沒有涉及這句話的任何代碼?你能證明嗎? –

+2

你必須在頭文件中定義模板,而不是僅僅聲明它。 '模板布爾deleteEdifice(INT){}' – clcto

+0

是在.cpp文件中'deleteEdifice'的定義是什麼? – 2014-03-26 21:14:09

回答

0

template <typename T> bool deleteEdifice(int); 

並不意味着它是空的,這意味着它是不確定的,如錯誤[Linker error] undefined reference

template <typename T> bool deleteEdifice(int) { return false; } 

是空

+0

我做同樣的事情,它給了我下面的錯誤:[鏈接錯誤]未定義參考'布爾城邦:: deleteEdifice (INT)「 – angel

0

I'm having problems with the linker. It gives me the following error: [Linker error] undefined reference to `bool Polis :: deleteEdifice (int) '

我「M假設你的代碼如下所示:

//.h file 
class Polis 
{ 
    public: 
    //...constructor etc... 
    template <class T> 
    bool deleteEdifice(int); 
}; 

同樣的.h文件

//, where definition of template is visible at 
// point of instantiation - remember, template is instantiated 
// when used (in compilation unit where used), therefore its 
// definition has to be visible in the scope where used. It is 
// only instantiated when used... If it's definition is not 
// available at the point of instantiation (where called for 
// a function template), it is never 
// compiled. 

template <class T> 
bool Polis::deleteEdifice(int) 
{ 
    //Implementation here... 
} 
+0

我做同樣的事情,它給了我下面的錯誤:[鏈接錯誤]未定義的引用'bool Polis :: deleteEdifice (int)' – angel