Отсутствует конструктор по умолчанию C++

633
28 ноября 2017, 22:55

Здравствуйте! Я новичок в программировании. Необходимо реализовать операции сложения, вычитания и тп. В main возникла проблема при объявлении объекта n1 " для класса Calculate не существует конструктор по умолчанию". Подскажите пожалуйста , где ошибка и что я сделал не так

#include <iostream>
using namespace std;
class Calculate {
private:
    int  x, y;


public:
    Calculate(int a, int b) {
        int x = a;
        int y = b;
    }

    void setNum() {
        cout << " Enter x:";
        cin >> x;
        cout << "Enter y: ";
        cin >> y;

    }
    void showNum() {
        cout << " x= " << x << endl;
        cout << "y= " << y << endl;

    }
    void sum(int x, int y) {
        int sum = x + y;
        cout << "Sum = " << sum << endl;
    }
    void sub(int x, int y) {
        int sub = x - y;
        cout << "Sub = " << sub << endl;
    }
    void mul(int x, int y) {
        int mul = x*y;
        cout << "Mul = " << mul << endl;
    }
    void div(int x, int y) {

        if (y == 0) {
            cout << "Division by zero" << endl;
        }
        else {
            int div = x / y;
            cout << "Div = " << div << endl;
        }
    }
};

int main() {

    int a, b;
    Calculate n1;
    n1.sum(a,b);
    n1.sub(a,b);
    n1.mul(a,b);
    n1.div(a,b);

    system("pause");
    return 0;
}
Answer 1

А чего ты ожидал - у тебя объявлено

Calculate n1;

Когда ты сам в классе прописал, что у тебя только один конструктор и он соответствует

Calculate n1(10, 20)

В классе надо указать еще один конструктор без параметров (конструктор по умолчанию)

Calculate() {
    x = 0;
    y = 0;
}

Когда ты в классе в явном виде указываешь конструкторы, они в неявном виде уже не предусматриваются.

Поэтому у тебя должно быть следующее:

class Calculate { 
    private: 
        int x, y;
    public:
        Calculate() {
            x = 0;
            y = 0;
        }
        Calculate(int a, int b) {
            x = a;
            y = b;
        }
    /* тут твои методы */
};

Ну и вторая ОФИГЕННАЯ ошибка:

Ты в конструкторе присваиваешь значения x, y, которые являются локальными и после завершения работы конструктора сдохнут

        Calculate(int a, int b) {
            int x = a;
            int y = b;
        }

int x = a;

вот это объявление надо убрать, т.е. будет

x = a;

А то конструктор у тебя вообще своей функции не выполнял.

Т.е. было:

Calculate(int a, int b) {
    int x = a;
    int y = b;
}

стало:

Calculate(int a, int b) {
    x = a;
    y = b;
}
READ ALSO
Нужна помощь с двумерными массивами C++

Нужна помощь с двумерными массивами C++

Нужно организовать проверку элементов двумерного массива по диагонали с рандомных координат, по аналогии с ходом коня в шахматахВот часть...

201
Ошибка &ldquo;You need to find .cpp to view the source for the current call stack frame&rdquo; при отладке

Ошибка “You need to find .cpp to view the source for the current call stack frame” при отладке

You need to find appmodulcpp to view the source for the current call stack frame

199
сравнение SIFT дескрипторов особых точек (OpenCV 3)

сравнение SIFT дескрипторов особых точек (OpenCV 3)

Буду очень признателен, если коллеги подскажут ссылку или исходник, где можно подсмотреть, как правильно добираться до значений вектора...

211