ide为windows下的g++,我重载了流插入运算符<<,在传递参数时出现错误,代码如下:
#include <iostream>
using namespace std;
 class number{
  private:
  double a,b,c,d;
  public:
  number(double x1,double x2,double x3,double x4):a(x1),b(x2),c(x3),d(x4){}
  number(){}
  number operator +(number &plu);
  friend number operator *(number &mul,number &mul1);
  number operator --(int);
  friend ostream& operator <<(ostream &,number &);
 }; 
 number number::operator +(number &plu)
 {
  number num;
  num.a=a+plu.a;
  num.b=b+plu.b;
  num.c=c+plu.c;
  num.d=d+plu.d;
  return num;
 } 
 number operator *(number &mul,number &mul1)
 {
  number result;//需要构造函数的重载
  result.a=mul.a*mul1.a;
  result.b=mul.b*mul1.b;
  result.c=mul.c*mul1.c;
  result.d=mul.d*mul1.d;
  return result;
 } 
 number number::operator --(int)
 {
  this->a=a--;
  this->b=b--;
  this->c=c--;
  this->d=d--;
  return *this;
 } 
 ostream& operator <<(ostream &output,number &num)
 {
  output<<num.a<<endl<<num.b<<endl<<num.c<<endl<<num.d<<endl;
  return output;
 } 
 int main()
 {
  number number1(158.1,124.39,332.2,967.03);
  number number2(2.3,32.3,48.4,64.3);
  number number3,number4;
  number3=number1+number2;
  cout<<(number1+number2)<<endl<<(number1*number2)<<endl;
 
  cout<<number1--<<endl;
 
  return 0;
 } 
 问题:在int main()中,cout<<(number1+number2)<<endl<<(number1*number2)<<endl;
 
  cout<<number1--<<endl;这两句代码有问题,报错是传递参数出错 
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
问编译问题最好带上编译报错,我猜,friendostream&operator<<(ostream&,number&); 后面这个改成constnumber&试试,因为你num--是返回一个临时变量作为<<的输入,可能g++中不允许对返回的临时变量操作,另外你的--的重载中类似   this->a=a--;这样的代码真的有意义么
问题一堆, operator--这个重载有问题this->a--即可,你this->a=a--这样写,=两边都在修改a,是undefined的.编译器应该会告警.
operator<<这个重载用const修饰第二个参数,没修改值尽量用const.
operator+和operator*的参数都用const修饰"只读"访问尽量用const
这样改完就可以编译运行了亲测可用