Как решить "вернуть значение" Ошибка в функции-член класса?
//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);
когда вы хотите вернуть какое-то значение. И помните, что возвращенное вами значение не будет отображаться на экране (может быть, в консоли?), Если не будут вызваны некоторые функции и ему не будет возвращено возвращаемое значение.