2015-09-14 51 views
0

我想建立一個指向對象的指針的鏈表,在定義時初始化它,而不是多次調用push_back()這將是愚蠢的。如何初始化對象指針列表

class Myclass { 
    int x; 
    string name; 
    bool test; 
    //whetever 
public: 
    Myclass(); 
    void inc_x(); 
    ~Myclass(); 
}; 

主營:

Myclass c1,c2,c3,c4; 
list<Myclass*> mylist; 
/* 
    list<Myclass*> mylist={&c1,&c2}; compiler returns initialized by constructor not by {...} 
*/ 

我試圖用list<Myclass*>::list<Myclass*>作爲類的構造函數形式,但是編譯器返回它需要的模板語法。

這是什麼意思?

如何初始化這些類型的列表?

在這種情況下,我如何定義構造函數而不是使用默認構造函數?

+1

您是否正在編譯啓用C++ 11? – TartanLlama

+0

不,我沒有將任何參數傳遞給編譯器 – Cfun

+0

然後你用什麼編譯器編譯? – Glapa

回答

1

std::initializer_list和相關的構造函數是C++ 11的特性,所以必須在編譯器中啓用。查看您的實施所需的文檔,瞭解如何執行此操作。在Clang或GCC中,只需在命令行調用中通過-std=c++11即可。

+0

它起作用時,我啓用c + + 11其他問題呢。有沒有其他的方法 – Cfun

+0

只要重複使用'push_front'可能是你最好的選擇,如果C++ 11不是一個選項。或者你可以初始化一個數組並使用列表迭代器範圍構造函數。 – TartanLlama

+0

你是對的,因爲我的第一個對象不是動態分配的,他們仍然會在那裏直到結束,比方說我在開始時有20個對象,我最好把它們放在一個數組中,然後使用循環將它們添加到鏈表中。 – Cfun