Как решить "вернуть значение" Ошибка в функции-член класса?

//PROGRAM:
#include<iostream>
#include<conio.h>
using namespace std;
class complex {
private:
    double re, img;
public:
    complex();
    void input();
    complex SubCom(complex c1, complex c2);
    complex SumCom(complex c1, complex c2);
    complex MulCom(complex c1, complex c2);
    void show();
};
complex::complex() {
    re = 0;
    img = 0;
}
void complex::input() {
    cout << "Real:";
    cin >> re;
    cout << "Imagnary:";
    cin >> img;
}
complex complex::SumCom(complex c1, complex c2) {
    re = c1.re + c2.re;
    img = c1.img + c2.img;
}
complex complex::SubCom(complex c1, complex c2) {
    re = c1.re - c2.re;
    img = c1.img - c2.img;
}
complex complex::MulCom(complex c1, complex c2)
{
    re = c1.re * c2.re;
    img = c1.img*c2.img;
}
void complex::show() {
    cout << re << "," << img << "i";

}

int main() {
    complex c1;
    c1.input();
    c1.show();
    complex c2;
    c2.input();
    c2.show();
    complex c;
    c.SumCom(c1, c2);
    c.show();
    c.MulCom(c1, c2);
    c.show();
    c.SubCom(c1, c2);
    c.show();
    _getch();
    return 0;
    system("pause");
}

Здравствуйте, я сделал программу, которая принимает целые числа от пользователя, используя функцию, которая является членом класса. Я сделал 3 функции-члена для суммы, продукта и разницы. Теперь ошибка показывает, что говорит, что

 1. complex::SumCom must return a value 
 2. complex::MulCom must return a value
 3. complex::SubCom must return a value.

2 ответа

Решение

Вот

complex SubCom(complex c1, complex c2);
^^^^^^^
complex SumCom(complex c1, complex c2);
^^^^^^^
complex MulCom(complex c1, complex c2);
^^^^^^^

ты обещал вернуть complex и в любом из ваших определений функций-членов вы не возвращаете его. Это неопределенное поведение, и вам повезло, что VS дал вам ошибку компилятора. Что касается ошибок компилятора, попробуйте включить предупреждения компилятора, чтобы увидеть и спасти себя от такого неопределенного поведения в вашем коде.

Решение состоит в том, чтобы добавить к вашим функциям-членам оператор возврата, который будет выглядеть так (например, SumCom() должно быть)

complex complex::SumCom(complex c1, complex c2) 
{
     // implementation
     return /*resulting complex object*/;
}

Однако я бы предложил перегрузить + , - , *operators так как три функции-члена выглядят как идеальные кандидаты для этого.

Вот пример кода:

#include<iostream>

class complex
{
private:
    double re, img;
public:
    complex() = default;

    friend complex operator+(complex c1, const complex& c2) {
        c1.re += c2.re;
        c1.img += c2.img;
        return c1;
    }
    friend complex operator-(complex c1, const complex& c2) {
        c1.re -= c2.re;
        c1.img -= c2.img;
        return c1;
    }
    friend complex operator*(complex c1, const complex& c2) {
        c1.re *= c2.re;
        c1.img *= c2.img;
        return c1;
    }
    void input();
    void show();
};
void complex::input()
{
        std::cout << "Real:" ; std::cin >> re;
        std::cout << "Imaginary:" ; std::cin >> img;
}
void complex::show() {
    std::cout << re << "," << img << "i\n";

}

int main()
{
    complex c1;
    c1.input();
    c1.show();
    complex c2;
    c2.input();
    c2.show();
    complex c = c1 + c2; // now you can
    c.show();
    c = c1 * c2; // now you can
    c.show();
    c = c1 - c2; // now you can
    c.show();
    return 0;
}

STDIN:

Real:Imaginary:1,1i
Real:Imaginary:2,2i

Выход:

3,3i
2,2i
-1,-1i

Вы должны написать return (object); когда вы хотите вернуть какое-то значение. И помните, что возвращенное вами значение не будет отображаться на экране (может быть, в консоли?), Если не будут вызваны некоторые функции и ему не будет возвращено возвращаемое значение.

Другие вопросы по тегам