2013-02-03 39 views
0

我有一個列表作爲具有兩個模板參數的類的私有成員:列表元素的數據類型爲type,列表元素的數目類型爲size列表。爲此,我想使用我的兩個模板參數來使用列表的填充構造函數。這裏是我的嘗試:無法使用模板參數定義變量類型和大小的列表

#include <list> 

template <typename type, unsigned int size> 
class my_class { 

    private: 
     std::list<type> my_queue(size, 0); 

    // More code here... 

}; 

我的做法似乎遵循提供here的信息和例子;但是當我編譯這個,我得到以下錯誤。

error: 'size' is not a type 
error: expected identifier before numeric constant 
error: expected ',' or '...' before numeric constant 

看起來好像它可以通過其默認構造函數而不是填充構造函數來識別列表的聲明。誰能幫我解決這個問題嗎?

謝謝!

編輯:這裏是我修改的源程序更多的細節。我現在在公共方法上遇到麻煩。 注意:這是我班的頭文件。

#include <list> 

template <typename T, unsigned int N> 
class my_class { 

    private: 

     std::list<T> my_queue; 

    public: 

     // Constructor 
     my_class() : my_queue(N, 0) { } 

     // Method 
     T some_function(T some_input); 
     // The source for this function exists in another file. 

}; 

編輯2:最終實現......謝謝你,@billz!

#include <list> 

template <typename T, unsigned int N> 
class my_class { 

    private: 

     std::list<T> my_queue; 

    public: 

     // Constructor 
     my_class() : my_queue(N, 0) { } 

     // Method 
     T some_function(T some_input){ 
     // Code here, which accesses my_queue 
     } 

}; 

回答

2

你可以在構造函數之前C++ 11只初始化成員變量,最好使用大寫字符作爲模板參數:

template <typename T, unsigned int N> 
class my_class { 
    public: 
    my_class() : my_queue(N, 0) { } 

    private: 
     std::list<T> my_queue; 

    // More code here... 

}; 

編輯:

牛逼some_function(T some_input); C++只支持包含模塊,您需要在聲明my_class的文件中定義some_function

+0

這似乎是工作,我雖然它有一個輸入參數的公共方法,並返回匹配'T'類型。當我編譯調用這個方法的主程序時,它聲稱這個方法有一個「未定義的引用」。 (請參閱原文,我編輯了示例代碼以顯示此方法。)有沒有辦法解決這個問題? –

+0

你是在my_class裏面定義了那個函數還是把它分隔開了? – billz

+0

不能使用'CQ()'作爲名稱,它必須是類名作爲構造函數名稱 – billz

相關問題