2011-03-22 3 views
0

J'ai un problème avec un constructeur par défaut en C++. C'est une chose simple mais ne peut pas voir ce qui ne va pas.Appel du constructeur par défaut

J'ai un constructeur avec 3 paramètres optionnels, avec des valeurs const sur la liste d'initialisation:

data::data(int D = 1, int M = 1, int Y = 1583) : Day(D), Month(M), Year(Y) 
{ 
    if (!CorrectDate()) throw "Wrong Date!"; 
} 

Pourquoi puis-je appeler avec un, deux ou trois paramètres et il fonctionne très bien, mais ne fonctionne pas quand je appelez-le sans paramètres?

data tommorrow(); 
+0

Voir: [parse le plus contrariant: pourquoi pas A un (()); travail?] (http://stackoverflow.com/questions/1424510/most-vexing-parse-why-doesnt-a-a-work). La réponse courte est, vous déclarez une fonction là. Si vous voulez appeler le constructeur par défaut, omettez les parens. –

Répondre

3

data tomorrow(); est une déclaration d'une fonction qui renvoie une data et ne prend aucun paramètre. Pour créer un objet data sans arguments de constructeur explicites, faites simplement data tomorrow; sans les parenthèses.

+0

Thx tout le monde, bien sûr que ça marche maintenant – mechu

1

Vous êtes probablement en train de faire quelque chose comme

data something(); 

qui n'est pas une initialisation d'une variable de type data appelé something, mais la déclaration d'une fonction appelée something qui retourne data.

Si tel est le cas, le bon serait:

data something; 
+0

Merci aussi :) – mechu

2

Définir comme

data tomorrow; 

data tomorrow(); est la même que la définition d'une fonction appelée tomorrow qui retourne data

+0

C'est bon maintenant, merci;) – mechu

0

Vous déclarent une fonction qui renvoie une donnée, vous pouvez faire soit:

data tommorow; 

Sans(), ou vous pouvez faire:

data tommorow = data(); 
Questions connexes