2011-03-22 135 views
0

我在C++中有一个默认构造函数的问题。这是一件简单的事情,但不能看出它有什么问题。调用默认构造函数

我有3个可选参数的构造函数,以初始化列表上的常量值:

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

为什么我一个,两个或三个参数调用它,它工作得很好,但没有我的时候调用它没有参数?

data tommorrow(); 
+0

参见:最棘手的解析:为什么不一个一个(());工作?](http://stackoverflow.com/questions/1424510/most-vexing-parse-why-doesnt-a-a-work)。简短的回答是,你在那里宣布一个功能。如果你想调用默认的构造函数,请省略父元素。 – 2011-03-22 01:17:55

回答

3

data tomorrow();是返回data和不带参数的函数的声明。要创建没有显式构造函数参数的data对象,只需在没有括号的情况下执行data tomorrow;

+0

Thx everyone,确定它现在有效 – mechu 2011-03-22 01:22:41

1

你可能会做这样的事情

data something(); 

这是不是叫somethingdata类型的变量的初始化,而是一个函数的声明称为something返回data

如果是这种情况,正确的应该是:

data something; 
+0

谢谢你也:) – mechu 2011-03-22 01:23:07

2

把它定义为

data tomorrow; 

data tomorrow();相同定义一个名为tomorrow函数返回data

+0

现在没关系,thx;) – mechu 2011-03-22 01:23:34

0

你正在声明一个返回数据的函数,你可以这样做:

data tommorow; 

没有(),或者你可以这样做:

data tommorow = data();