2013-10-27 10 views
6

私はC++にはとても新しいので、単純なことを見落としてしまった場合は私を許してください。私はクラスを持っていますサークル:C++のデフォルトのコンストラクタが呼び出されていない

}しかしサークルはサークル(で作成された私は、各コンストラクタを使用して2つの円を作成しようと私のメインで

Circle::Circle() 
{ 
    Point p(1,1); 
    focus = p; 
    radius = 10; 
    name = "Circle"; 
    calculatePerimeter(); 
    calculateArea(); 
    cout<<"default circle"<<endl; 
} 
Circle::Circle(Point p, float r) 
{ 
    focus = p; 
    radius = r; 
    name = "Circle"; 
    calculatePerimeter(); 
    calculateArea(); 
} 

、:

は、私が過負荷にしたデフォルトそのうちの1つは2つのコンストラクタを持っています)は決して創造されない。なぜ私の人生のために理解できないのですか?エラーメッセージなどはありません。

int main{ 
    Circle circle(a, 3.3); 
    Circle c2(); 
} 

答えて

21
Circle c2(); 

オブジェクトを作成しません、それは引数を取らず、Circleオブジェクトを返す名前c2によって関数を宣言します。あなたがオブジェクトを作成したい場合は、単に使用します。

Circle c2; 
+1

これは完璧に働いた、ありがとう。私は最終的にそれが午前3時でなければ気づいたかもしれません。私は今終わると思う。 – MichelleJS

+1

また、 'Circle c2 {}'は値の初期化で、 'Circle c2;'はデフォルトの初期化です。 – Nawaz

+5

ああ、それは*ほとんど*厄介な構文解析ではありません。それはちょうど厄介な*解析です。 'Type1 a(Type2());'は*ほとんどの* vexing解析です。 – Nawaz

6

をここにこれがインスタンス化ではなく、関数宣言:

// parameter-less function c2, returns a Circle. 
Circle c2(); 

あなたは

Circle c2; 

または

Circle c2{}; // requires c++11 
必要
関連する問題