2011-03-22 183 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();