| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1532 人关注过本帖, 1 人收藏
标题:[求助]为什么这样不能实现隐式类型转换?
取消只看楼主 加入收藏
haitaotao
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-7-14
收藏(1)
 问题点数:0 回复次数:4 
[求助]为什么这样不能实现隐式类型转换?
定义复数类Complex
头文件中:
#include <iostream>
using namespace std;

class Complex
{
  friend Complex operator + (Complex&, Complex&);
public:
  Complex();
  Complex(double);//将双精度型转换成Complex型
  Complex(double, double);
  ...
private:
  double real;
  double imag;
};
Complex::Complex(double r)
{
  real = r;
  imag = 0;
}
……
在main文件中

……
Complex c1(3,-4);
c2 = 4.0 + c2;
……
编译时g++说
$ g++ -c main.cpp
main.cpp: In function `int main()':
main.cpp:26: error: no match for 'operator+' in '4.0e+0 + c2'
complex.h:17: note: candidates are: Complex operator+(Complex&, Complex&)

这是为什么?不是系统会隐式调用Complex(double)吗?

还有friend Complex operator + (Complex&, Complex&);
我重载了+
friend Complex operator + (Complex& c1, Complex& c2)
{
  return Complex(c1.real + c2.real, c1.imag + c2.imag);
}

[[it] 本帖最后由 haitaotao 于 2008-10-10 15:54 编辑 [/it]]
搜索更多相关主题的帖子: 类型 
2008-10-10 15:50
haitaotao
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-7-14
收藏
得分:0 
回复 2# song4 的帖子
改了,不行
2008-10-10 21:17
haitaotao
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-7-14
收藏
得分:0 
回复 6# sunkaidong 的帖子
不是在执行
c2 = 4.0 + c2
时,编译器会隐式地调用Complex(double)
函数,将4.0转换成Complex(4,0),
然后在执行Complex operator + (Complex& c1, Complex& c2)
的吗?
书上说这种隐式调用可以避免函数重载,你们看呢?
2008-10-11 21:38
haitaotao
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-7-14
收藏
得分:0 
自问自答
总算搞定了!!!
注意Complex operator + (Complex& c1, Complex& c2)
参数是Complex&
而隐式调用只能实现一步转换,几把2.0转换为(2.0,0i),而不能一步转换成Complex&型
解决方法只需将Complex operator + (Complex& c1, Complex& c2)
改为Complex operator + (Complex c1, Complex c2)
就行了
\(^o^)/
2008-10-21 23:09
haitaotao
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-7-14
收藏
得分:0 
回复 9# newyj 的帖子
网上搜搜吧,c++里的名字空间
2008-10-23 12:08
快速回复:[求助]为什么这样不能实现隐式类型转换?
数据加载中...
 
   



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

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