2016-04-21 102 views
-4
之外定義

我知道必須在同一個文件中聲明和定義模板。但是,爲什麼我不能:爲什麼模板必須在類

#ifndef guard 
#define guard 
template<typename T> 
class Test{ 
    void method(){ 

    } 
}; 
#endif 

而且它的原因編譯器錯誤(不直接,但在兩個不同的地方 - 例如在main(),並在任何類別字段導致錯誤instatantiation模板測試

。它必須在外面類中定義(它不會導致錯誤,如這裏)

#ifndef guard 
#define guard 
template<typename T> 
class Test{ 
    void method(); 

}; 
#endif 
template<typename T> 
void Test<T>::method(){} 

爲什麼?

+2

什麼是錯誤信息? – davmac

+4

你完全可以在類中定義類模板的成員函數。請提供您正在收到的實際編譯錯誤的[mcve]。 – Barry

+0

我不知道如何創建與第二個消失的第一個片段的錯誤 – user463035818

回答

1

類模板的成員函數ç一個可以在類模板聲明中內聯定義。

在問題的代碼:

template<typename T> 
class Test{ 
    void method(){ 

    } 
}; 

是公形成。問爲什麼你不能這樣做是錯誤的。

相關問題