2013-11-02 22 views
7

Ho provato a creare la mia struttura. Così ho scritto questo pezzo di codice.C++ struct constructor

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

node t[100]; 

int main() 
{ 
... 
} 

Ho provato a compilare il mio programma. Ma ho ottenuto un errore:

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

'nodo t [100];' default-costruisce ciascun elemento, ma 'node' non ha un costruttore predefinito. – 0x499602D2

+1

possibile duplicato di [Un tipo richiede un costruttore predefinito per dichiarare un array di esso?] (Http://stackoverflow.com/questions/2231414/does-a-type-require-a-default-constructor-in -order-to-declare-an-array-of-it) – bames53

risposta

13
node t[100]; 

cercherà di inizializzare l'array chiamando il costruttore predefinito per node. Si potrebbe o fornire un costruttore predefinito

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

o meglio verbosely, inizializzare tutte le 100 elementi esplicitamente

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

o, dal momento che si sta utilizzando C++, utilizzare std::vector invece, aggiungendo ad esso (usando push_back) a runtime

std::vector<node> t; 
+0

per aiuto, funziona! – PepeHands

+1

@simonc: +1 grazie – lolando

9

Questo risolverà il tuo errore.

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

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

È necessario dichiarare costruttore predefinito.

+0

sì, grazie) – PepeHands