2013-12-15 71 views
1

這裏是我的結構:如何在C++ 11中將結構中的指針初始化爲空?

struct node { 
    int load; 
    int tolerance; 
    bool has_fired; 
    node *in[1]; 
    node *out[1]; 
    }; 

我已經試過:

node mynode; 

mynode->in = null; 
mynode->in = nullptr; 
mynode->in = &nullptr; 
mynode->in = 0; 
mynode->in = false; 

我真的不知道什麼是錯的,我記得曾經工作但現在不是了明顯的第一項任務。任何幫助?

編輯:在實際的源文件'mynode'是另一個結構中的指針。

+0

在你的代碼中,'in'是隻有1個元素的數組,這個數組的類型是指向節點的指針。您無法將數組初始化爲空。 –

+2

只有一個元素的數組有什麼意義? –

+0

我想知道你爲什麼組成一個元素的數組?有什麼特別的理由或需要嗎? – luk32

回答

5

喜歡這也許:

struct node 
{ 
    int load; 
    int tolerance; 
    bool has_fired; 
    node *in[1] = { nullptr }; 
    node *out[1] = { nullptr }; 
}; 

(注意node::innode::out陣列指針。)

用法:

node n; // n.in and n.out are initialized 

在C++ 11的括號或等於初始值設定項使類成爲非聚合。如果這是一個問題,你也可以省略初始化,並說:

node n; 
n.in[0] = nullptr; 
n.out[0] = nullptr; 

甚至:

node n { 0, 0, false, { nullptr }, { nullptr } }; 
4

嘗試值初始化:

node mynode{}; 

這將值初始化所有成員,這對於內置和PODS意味着零初始化。

+0

+1。這個更好! – Nawaz

+1

絕對是一個很好的答案。我想不同的是OP是想要初始化一個特定的對象,還是爲整個類提供初始化語義。很好有選擇的選擇。 –

0

創建構造函數?

struct node 
{ 
    node() 
     : in{{ nullptr }}, out{{ nullptr }} 
    {} 

    ... 
}; 
0

這是分配而不是初始化。由於in是一個指針數組,因此必須將數組元素設置爲null。另外mynode不是一個指針,所以你不使用箭頭運算符。

mynode.in[0] = nullptr;