2015-11-13 4 views
-1

Я знаю, что это было задано раньше, но я не могу найти проблему в своем коде. Это довольно простой код, я проверил и класс Point работает отлично (это имеет значение по умолчанию (0,0)), хотя Circle один неC++ Нет соответствующего конструктора по умолчанию

class Circle{ 
public: 
    Circle(Point, double); 
    Circle(const Circle& c); 
    ~Circle(); 
    void setCenter(Point scenter); 
    void setRadius(double sradius); 
    double getSurface(); 
    Point getCenter() const; 
    double getRadius() const; 
    void print() const; 

private: 
    Point center; 
    double radius; 
}; 

Circle::Circle(Point c, double r) 
{ 
    r = 1.0; 
    setCenter(c); 
    setRadius(r); 
} 

Что я делаю неправильно?

+0

Вам необходимо реализовать конструктор по умолчанию, то есть один без каких-либо параметров (или параметры имеют аргументы по умолчанию) ... 'Circle()' – Praetorian

+0

Введенный код не требует конструктора по умолчанию для Circle (которого у вас нет). Совершенно нормально иметь класс без конструктора по умолчанию, но он не должен использоваться без конкретного конструктора. – SergeyA

+0

Только если вы на самом деле пытаетесь использовать конструктор по умолчанию (как в 'Circle circle;'), который здесь не показан – Kevin

ответ

2

Конструктор по умолчанию генерируется только для вас, если у вас нет других конструкторов. Если вы хотите иметь конструктор по умолчанию (т. Е. Никаких аргументов) в дополнение к конструкторам с аргументами, вам необходимо определить его.

+0

+1, я также должен добавить, что в какой-то момент вашего кода вы пытаетесь сделать Circle foo; или Circle foo(); или Circle * foo = new Circle(); тем самым вызывая конструктор без аргументов. если бы вы использовали только созданные вами конструкторы, ошибок не было бы; – ForeverStudent

Смежные вопросы