2013-10-27 3 views
6

Я очень новичок в C++, поэтому простите меня, если я упустил что-то простое. У меня есть класс Круг:C++ default Конструктор, который не называется

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

Oh BTW, это не * самый * неприятный синтаксис. Это просто * досадный * синтаксический анализ. 'Type1 a (Type2());' is * most * vexing parse. – Nawaz

6

Это здесь не конкретизацией, а функция объявления:

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

Вам нужно

Circle c2; 

или

Circle c2{}; // requires c++11 
Смежные вопросы