2013-11-02 139 views
7

我試圖創建自己的結構。所以我寫了這段代碼。C++ struct構造函數

struct node 
{ 
    int val, id; 
    node(int init_val, int init_id) 
    { 
     val = init_val; 
     id = init_id; 
    } 
}; 

node t[100]; 

int main() 
{ 
... 
} 

我試圖編譯我的程序。但是,我得到了一個錯誤:

error: no matching function for call to 'node::node()' 
note: candidates are: 
note: node::node(int, int) 
note: candidate expects 2 arguments, 0 provided 
note: node::node(const node&) 
note: candidate expects 1 argument, 0 provided 
+4

'node t [100];'default-constructs each element,but'node' does not have a default constructor。 – 0x499602D2

+1

[某種類型是否需要默認構造函數以聲明它的數組?](http://stackoverflow.com/questions/2231414/does-a-type-require-a-default-constructor-in順序聲明一個數組) – bames53

回答

13
node t[100]; 

將嘗試通過調用node默認構造函數初始化數組。你既可以提供一個默認的構造函數

node() 
{ 
    val = 0; 
    id = 0; 
} 

,或者更確切地說冗長,初始化所有的100個元素明確

node t[100] = {{0,0}, {2,5}, ...}; // repeat for 100 elements 

,或者由於您使用C++,使用std::vector相反,附加到它(使用push_back )在運行時

std::vector<node> t; 
+0

thaks求助,它的工作原理! – PepeHands

+1

@simonc:+1謝謝 – lolando

9

這將解決您的錯誤。

struct node 
{ 
int val, id; 
node(){}; 

node(int init_val, int init_id) 
{ 
    val = init_val; 
    id = init_id; 
} 
}; 

你應該聲明默認的構造函數。

+0

是的,謝謝你) – PepeHands