ошибка C2512: нет подходящего конструктора по умолчанию - PullRequest
14 голосов
/ 31 декабря 2011

Я получаю эту досадную ошибку, и я не знаю, почему = (! Это вопрос, я решил его, но у меня проблема с конструктором.

Написать программу, котораяопределяет класс с именем Circle, который включает радиус (тип double) в качестве элементов данных. Предоставить набор и функцию get для этого элемента данных. Убедитесь, что введенное пользователем значение является правильным и правильным (больше нуля).
Включитьчлены функции: a.function-элемент, который вычисляет и возвращает диаметр круга. b.function-элемент, который вычисляет и возвращает окружность круга. c.function-элемент, который вычисляет и возвращает площадь круга, элемент d.function, который отображает всю информацию о круге.e.constructor, который инициализирует элемент данных. Если радиус недействителен (то есть меньше нуля), установите его на ноль.

ошибка, с которой я сталкиваюсь:

ошибка C2512: «Круг»: не доступен соответствующий конструктор по умолчанию

это мой код:

    #include <iostream>

    using namespace std;

    class Circle
        {
            public:

            Circle(double);
            void setRadius(double);
            double getRadius();
            void Display();
            double Diameter(double);
            double Circumference(double);
            double Area(double);

            private:

            double radius;

        };

        Circle::Circle(double radio)
            {
                setRadius(radio);
            }

        void    Circle::setRadius(double ra)
            {
                if (ra < 0)
                {
                    radius = 0;
                }
                else
                    radius = ra;
            }

        double  Circle::getRadius()
            {

                double rado;

            cout << "Enter the Radius:\n";
            cin >> rado;
            setRadius(rado);

            return radius;
            }

        double  Circle::Diameter(double rad)
            {
                return 2*rad;
            }

        double  Circle::Area(double radi)
            {
                return 3.14 * radi * radi;
            }


        double  Circle::Circumference(double radiu)
            {
                return 2 * 3.14 * radiu;
            }

        void Circle::Display()
        {   
            cout << "The Radius of the circle is: \n";
            cout << radius;
            cout << "\nThe Diameter of the circle is: \n";
            cout << Diameter(radius);
            cout << "\nThe Circumference of the circle is: \n";
            cout << Circumference(radius);
            cout << "\nThe Area of the circle is: \n";
            cout << Area(radius);
            cout << endl;
        }

        int main()
        {
            Circle C;
            C.getRadius();
            C.Display();

            return 0;
        }

Ответы [ 4 ]

15 голосов
/ 31 декабря 2011

Эта строка вызывает конструктор без аргументов (известный как конструктор по умолчанию):

Circle C;

Единственный определенный вами конструктор:

Circle(double);

Надеюсь, это должно указать вамправильное направление.

5 голосов
/ 31 декабря 2011

Конструктор по умолчанию - это конструктор без параметров.Обычно это предусмотрено для вас.Но если вы явно определите любой другой конструктор, то это не так.Таким образом, вы должны определить это самостоятельно, или не использовать его.Вы используете его, когда создаете объект в main, например:

Circle C;

Итак, либо определите конструктор по умолчанию, либо не используйте его.

3 голосов
/ 31 декабря 2011

Ну, тогда добавь один:)

Circle() : radius(0.0) {}
0 голосов
/ 15 августа 2014

Вы должны определить конструктор без параметров, называемый конструктором по умолчанию. Вы можете инициализировать связанные элементы со значениями по умолчанию.

Circle::Circle()
   {
   radius = 0.0
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...