+ -
当前位置:首页 → 问答吧 → 这个程序编译不过去,大家伙帮我看看!

这个程序编译不过去,大家伙帮我看看!

时间:2011-12-07

来源:互联网

#include <iostream>
using namespace std;
class Complex
{
  public:
  Complex(){real = 0;imag = 0;}
  Complex(int r,int i):real(r),imag(i){}
  Complex(int r){real = r;imag = 0;}
  ~Complex(){cout << "the object is over" << endl;}
  void display(void){cout << real << " + " << imag << "i" << endl;}
  Complex operator+(Complex &);
  private:
  int real;
  int imag;
};

Complex Complex :: operator+(Complex & x)
{
  return Complex(x.real +real,x.imag + imag);
}
int main(void)
{
  Complex c1(1,1),c2(2,2),c3;
  c3 = c1 + Complex(1,0);//这里好像有问题
}[/size]

作者: zlf_vip   发布时间: 2011-12-07

Complex Complex :: operator+(Complex & x)
{
  return Complex(x.real +real,x.imag + imag);
}
 


这个有问题吧, 私有变量可以这样访问?

作者: chengzhe   发布时间: 2011-12-07

可以呀,类的的成员函数可以默认访问类的数据成员

作者: zlf_vip   发布时间: 2011-12-07

1. 
c3 = c1 + c2 
OK

2. 
 Complex operator+(Complex);
Complex Complex :: operator+(Complex x)
{
  return Complex(x.real +real,x.imag + imag);
}

ok

作者: yfkiss   发布时间: 2011-12-07

vs2008能编译,能运行

作者: yisikaipu   发布时间: 2011-12-07

补充说明:
C++语言禁止为非常量引用产生临时对象

作者: yfkiss   发布时间: 2011-12-07

gcc下修改下:
Complex operator+(Complex &);改成如下
Complex operator+(const Complex &);

作者: yisikaipu   发布时间: 2011-12-07