2017-10-20 70 views
0

如何擁有多個模板參數?爲什麼這不起作用?具有特定類型參數的C++模板

template <class T, int size> 
class List { 
public: 
    void addElement(int); 
private: 
    T arr[size]; 
}; 

template <class T, int size> 
void List<T,int>::addElement(T n){ 
    arr[0] = n; 
} 

int main(){ 
    List<int,5> l; 
    l.addElement(3); //example method 
} 

錯誤消息:

main.cpp:10:16: error: type/value mismatch at argument 2 in template 
parameter list for 'template<class T, int size> class List' void 
List<T,int>::addElement(T n){ 
       ^main.cpp:10:16: note: expected a constant of type 'int', got 'int' main.cpp: In function 'void addElement(T)': 
main.cpp:11:5: error: 'arr' was not declared in this scope 
    arr[0] = n; 
    ^~~ 

Fromo http://coliru.stacked-crooked.com/a/4bf130e4d6ed4342

+0

請詳細說明你的意思是「不行」是什麼。沒有足夠的信息來識別或重現問題。 –

+1

你的代碼是否在任何函數之外?該課程實際上是否缺少分號?使用不是[mcve]的代碼很難。 – chris

+1

這是使用正確的語法,所以我猜錯誤是在別的地方。你可以發佈一個最小自包含的例子(當你編譯時產生確切的錯誤?) – templatetypedef

回答

0

我發現代碼中的一些錯誤。 讓我給你看看修復。

template <class T, int size> 
class List { 
public: 
    void addElement(T); //ERROR here is T instead int 
private: 
    T arr[size]; 
}; 

template <class T, int size> 
void List<T,size>::addElement(T n){ //ERROR here is <T,size> instead <T,int> 
    arr[0] = n; 
} 

int main(){ 
    List<int,5> l; 
    l.addElement(3); 
} 

我希望我幫助

相關問題