2013-10-27 70 views
6

我對C++非常新,所以如果我忽略了一些簡單的東西,請原諒我。我有一個班圈:C++默認構造函數不被調用

class Circle: public Shape{ 
protected: 
    //string name; 
    Point focus; 
    float radius; 
private: 

public: 
    virtual void calculateArea(); 
    virtual void calculatePerimeter(); 
    Circle(); 
    Circle(Point p, float r); 

};

我有兩個構造函數,其中一個是我所重載默認:我嘗試創建一個使用每個構造兩個圓一個

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(); 
} 

我主要的,但是圈被用圓圈(創建)永遠不會被創建。我不能爲我的生活弄清楚爲什麼?沒有錯誤消息或任何東西。

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

回答

21
Circle c2(); 

不創建一個對象,它聲明的名字c2一個函數,它不帶任何參數,並返回一個Circle對象。如果你想創建一個對象只需使用:

Circle c2; 
+1

完美的工作,謝謝。如果不是凌晨3點,我可能最終會注意到。我認爲現在放棄時間。 – MichelleJS

+1

還是更好一些:'Circle c2 {}'這是值初始化和'Circle c2;'是默認初始化。 – Nawaz

+5

哦,順便說一下,這不是*最令人頭疼的解析。這只是*煩惱*解析。 'Type1 a(Type2());'* * * * * * * * * * * * * * * * – Nawaz

6

在這裏,這是不是一個實例,而是一個函數聲明:

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

你需要

Circle c2; 

Circle c2{}; // requires c++11