末尾函数该返回什么?

夜太美。 2019-04-24 01:42:40
这道题在pta上怎么编译错误?



#include<iostream>
using namespace std;

class Complex {
public:
Complex(double realPart = 0, double imgPart = 0) {
this->realPart = realPart;
this->imgPart = imgPart;
}
Complex& operator+(Complex& com);
void Show() {
cout << realPart << " " << imgPart << endl;
}
private:
double realPart, imgPart;
};
int main() {
int r1, i1; //第1个复数对象的实部和虚部
int r2, i2; //第1个复数对象的实部和虚部
cin >> r1 >> i1;
cin >> r2 >> i2;
Complex c1(r1, i1); //构造第1个复数对象c1
Complex c2(r2, i2); //构造第2个复数对象c2
c1 = c1 + c2;
c1.Show();

return 0;
}
Complex& Complex::operator+(Complex& com)
{
return Complex(realPart+com.realPart,imgPart+com.imgPart);
}
...全文
116 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
夜太美。 2019-04-25
  • 打赏
  • 举报
回复
引用 7 楼 636f6c696e 的回复:
楼上的人已经说了,你的重载定义有问题,改成这样就好了:
#include<iostream>
using namespace std;

class Complex {
public:
    Complex(double realPart = 0, double imgPart = 0) {
        this->realPart = realPart;
        this->imgPart = imgPart;
    }
    Complex operator+(Complex& com) const;
    void Show() {
        cout << realPart << " " << imgPart << endl;
    }
private:
    double realPart, imgPart;
};
int main() {
    int r1, i1; //第1个复数对象的实部和虚部
    int r2, i2; //第1个复数对象的实部和虚部
    cin >> r1 >> i1;
    cin >> r2 >> i2;
    Complex c1(r1, i1); //构造第1个复数对象c1
    Complex c2(r2, i2); //构造第2个复数对象c2
    c1 = c1 + c2;
    c1.Show();

    return 0;
}
Complex Complex::operator+(Complex& com) const
{
return Complex(realPart+com.realPart,imgPart+com.imgPart);
}
[quote=引用 5 楼 夜太美。 的回复:] [quote=引用 4 楼 636f6c696e 的回复:] g++编译报错 main.cpp:31: error: invalid initialization of non-const reference of type 'Complex&' from a temporary of type 'Complex'
什么意思?[/quote][/quote] 嗯嗯谢谢呀
636f6c696e 2019-04-24
  • 打赏
  • 举报
回复
楼上的人已经说了,你的重载定义有问题,改成这样就好了:
#include<iostream>
using namespace std;

class Complex {
public:
    Complex(double realPart = 0, double imgPart = 0) {
        this->realPart = realPart;
        this->imgPart = imgPart;
    }
    Complex operator+(Complex& com) const;
    void Show() {
        cout << realPart << " " << imgPart << endl;
    }
private:
    double realPart, imgPart;
};
int main() {
    int r1, i1; //第1个复数对象的实部和虚部
    int r2, i2; //第1个复数对象的实部和虚部
    cin >> r1 >> i1;
    cin >> r2 >> i2;
    Complex c1(r1, i1); //构造第1个复数对象c1
    Complex c2(r2, i2); //构造第2个复数对象c2
    c1 = c1 + c2;
    c1.Show();

    return 0;
}
Complex Complex::operator+(Complex& com) const
{
return Complex(realPart+com.realPart,imgPart+com.imgPart);
}
引用 5 楼 夜太美。 的回复:
[quote=引用 4 楼 636f6c696e 的回复:] g++编译报错 main.cpp:31: error: invalid initialization of non-const reference of type 'Complex&' from a temporary of type 'Complex'
什么意思?[/quote]
幻夢之葉 2019-04-24
  • 打赏
  • 举报
回复
引用 5 楼 夜太美。 的回复:
[quote=引用 4 楼 636f6c696e 的回复:] g++编译报错 main.cpp:31: error: invalid initialization of non-const reference of type 'Complex&' from a temporary of type 'Complex'
什么意思?[/quote] 提示不能临时对象的非const的引用 你返回了一个局部变量(非const或非static)的引用
夜太美。 2019-04-24
  • 打赏
  • 举报
回复
引用 4 楼 636f6c696e 的回复:
g++编译报错 main.cpp:31: error: invalid initialization of non-const reference of type 'Complex&' from a temporary of type 'Complex'
什么意思?
636f6c696e 2019-04-24
  • 打赏
  • 举报
回复
g++编译报错 main.cpp:31: error: invalid initialization of non-const reference of type 'Complex&' from a temporary of type 'Complex'
夜太美。 2019-04-24
  • 打赏
  • 举报
回复
引用 1 楼 LubinLew 的回复:
你最后这个运算符重载完全是错误的, 看一下下面这个文章 http://www.cnblogs.com/LubinLew/p/CppOperatorOverload-BinaryOperator.html
Complex& Complex::operator+(Complex& com) 这个没有错啊 可以输出正确答案 但在pta上不能编译通过
幻夢之葉 2019-04-24
  • 打赏
  • 举报
回复
+重载函数的最常规函数原型如下: Complex operator+(const Complex& com) const;
LubinLew 2019-04-24
  • 打赏
  • 举报
回复
你最后这个运算符重载完全是错误的, 看一下下面这个文章
http://www.cnblogs.com/LubinLew/p/CppOperatorOverload-BinaryOperator.html

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧