| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 692 人关注过本帖
标题:一个小问题,谁帮我解决一下!!!!!
只看楼主 加入收藏
qianzhangxin
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-6-6
结帖率:0
收藏
已结贴  问题点数:5 回复次数:10 
一个小问题,谁帮我解决一下!!!!!
#include<iostream.h>
class Complex
{
public:
    Complex(){real=0;imag=0;}
    Complex(double r){real=r;imag=0;}
    Complex(double r,double i){real=r;imag=i;}
    friend Complex operator + (Complex &,Complex &);
    void display();
private:
    double real;
    double imag;
};
Complex operator + (Complex &c1,Complex &c2)
{return Complex(c1.real+c2.real,c1.imag+c2.imag);}
void Complex::display()
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}

int main()
{
    Complex c1(3,4),c2(5,-10),c3;
    c2=c1+2.5;
    c3.display();
    return 0;
}






error C2679: binary '+' : no operator defined which takes a right-hand operand of type 'const double' (or there is no acceptable conversion)
执行 cl.exe 时出错.

shixi.obj - 1 error(s), 0 warning(s)
搜索更多相关主题的帖子: void Complex private display 
2010-06-06 21:37
孔凡龙king
Rank: 1
等 级:新手上路
帖 子:82
专家分:4
注 册:2009-5-7
收藏
得分:1 
c2=c1+2.5;错误
运算符+重载函数friend Complex operator + (Complex &,Complex &);
操作对象为两个Complex实例
2010-06-06 22:41
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
收藏
得分:1 
#include<iostream>
using namespace std;
class Complex
{
public:
    Complex(){real=0;imag=0;}
    Complex(double r){real=r;imag=0;}
    Complex(double r,double i){real=r;imag=i;}
    friend Complex operator + (Complex &,Complex &);
    friend Complex operator + (Complex &,double );
    void display();
private:
    double real;
    double imag;
};
Complex operator + (Complex &c1,Complex &c2)
{return Complex(c1.real+c2.real,c1.imag+c2.imag);}
Complex operator + (Complex &c1,double c2)
{return Complex(c1.real+c2,c1.imag + 0.0);}
void Complex::display()
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}

int main()
{
    Complex c1(3,4),c2(5,-10),c3;
    c2=c1 + 2.5;//你这个是常数,+好没有办法运算这个,你要重载一个+函数
    c3.display();
    return 0;
}
2010-06-06 22:43
qianzhangxin
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-6-6
收藏
得分:0 
回复 3楼 kingsroot
但是我在类中定义了一个转换构造函数,实数和复数进行运算的时候就能够将实数转换成复数的啊。
2010-06-07 12:06
qianzhangxin
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-6-6
收藏
得分:0 
按照谭浩强的习题编的程序,vs2008编译有误:
Complex(double r,double i)
 {
  real=r;
  imag=i;
 }
按照谭老爷子的讲解,主函数里的c3=c1+2.5这一行,应该这样理解,首先调用重载运算符函数,计算c1+2.5,这时候又发现,2.5不是Complex类的,这时系统寻找类型转换函数,找到了,就应该调用类型转换函数,将2.5强制转换成Complex类的,完事了,在继续调用对+的重载函数。可是我运行的时候,VS2008说,+号两边的变量类型不对,应该是没把2.5转换成Complex类对象。为什么呢?期待高手为小弟解惑,先行谢过……
问题补充:程序没发全,不好意思:

#include <iostream.h>
class Complex
{
public:
 Complex()
 {
  real=0;
  imag=0;
 }
 
 Complex(double r)
 {
  real=r;
  imag=0;
 }
 Complex(double r,double i)
 {
  real=r;
  imag=i;
 }
 void display()
 {
  cout<<"("<<real<<","<<imag<<")"<<endl;
 }
 friend Complex operator+(Complex&,Complex&);
private:
 double real,imag;
};


int _tmain(int argc, _TCHAR* argv[])
{
 Complex c1(2,3),c2(4,5),c3;
 double d=2.5;
 //c2=d;
 c3=c1+2.5;
 c3.display();
 system("pause");
 return 0;
}
Complex operator+(Complex &c1,Complex &c2)
{
 return Complex(c1.real+c2.real,c1.imag+c2.imag);


2010-06-07 12:18
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
收藏
得分:0 
#include<iostream>
using namespace std;

class Complex
{
public:
    Complex(){real=0;imag=0;}
    Complex(double r){real=r;imag=0;}
    Complex(double r,double i){real=r;imag=i;}
    friend Complex operator + (Complex &,Complex *);
    void display();
private:
    double real;
    double imag;
};
Complex operator + (Complex &c1,Complex *c2)
{return Complex(c1.real+c2->real,c1.imag+c2->imag);}
void Complex::display()
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}

int main()
{
    Complex c1(3,4),c2(5,-10),c3;
    c2=c1+(&(Complex(2.5)));//要把这里显示调用转换函数,然后传地址,因为这里引用没有作用(具体涉及到编译器实现了)
    c2.display();
    return 0;
}
这样就对了 但是不建议这样子做
2010-06-07 12:26
qianzhangxin
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-6-6
收藏
得分:0 
回复 6楼 kingsroot
那还有没有其他的方法啊,不要实数复数相加用运算符重载。
2010-06-07 13:00
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
收藏
得分:0 
那就用我Complex operator + (Complex &c1,double c2)实现一个友员函数就可以了呀
2010-06-07 13:38
qianzhangxin
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-6-6
收藏
得分:0 
回复 8楼 kingsroot
那你用的是什么编译器啊?? 是VC++ 吗?????

2010-06-07 14:29
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
收藏
得分:0 
G++ 和标准C++兼容得很号  VC++编译器不是很好
2010-06-07 23:25
快速回复:一个小问题,谁帮我解决一下!!!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017767 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved