为什么提示ambiguous,该怎么解决

mailtocc 2006-08-07 05:43:07
template<class TYPE>
class CType
{
public:
CType() {
data = 0;
}
CType(const CType& type) {
data = type.data;
}
~CType() {
data = 0;
}

operator TYPE&() {
return data;
}

protected:
TYPE data;
};

typedef CType<DWORD> CDWord;

执行代码:
CDWord dw;
DWORD dw2;

dw2 = dw; // error C2593: 'operator =' is ambiguous
dw = dw2; // error C2593: 'operator =' is ambiguous

vc6.0 + sp6环境下编译会有如上出错提示

下面这样写没有,不过已经违背了我设计这个类的初衷
(DWORD&)dw2 = dw; // OK
dw = (DWORD&)dw2; // OK

...全文
1081 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mailtocc 2006-08-08
  • 打赏
  • 举报
回复
回楼上的,CString也拥有LPCTSTR,也从来没有将他当作LPTSTR来使用。而且这里如果这个类用于int,double等定长数据类型,也就不会存在内存溢出等问题。
如果将所有的操作符都重载,问题就基本上很少了。但是这里一个operator TYPE&,就可以解决++,--,+=,-=,*=,/=等等一系列问题了,虽然无法解决=。

其实我心中最大的疑问在于,编译器为什么会提示说含糊不清?这个=难道可以理解成哪几样?
fangrk 2006-08-08
  • 打赏
  • 举报
回复
我用.net2003命令行模式编译了一遍,结果是:
a.cpp(32) : error C2679: 二进制“=” : 没有找到接受“<未知>”类型的右操作数的运
算符(或没有可接受的转换)
即:dw = dw2;错误
fangrk 2006-08-07
  • 打赏
  • 举报
回复
取消这个函数
operator TYPE&() {
return data;
}

虽然现在看起来给你带来了方便,但是更多时候它的作用会出乎你的意料

std::string也没有提供operator const char*();难道这不能给你启示吗?
vigorous001 2006-08-07
  • 打赏
  • 举报
回复
operator TYPE&() {
return data;
}

干吗用的?
hy98521 2006-08-07
  • 打赏
  • 举报
回复
同意楼上的。
jixingzhong 2006-08-07
  • 打赏
  • 举报
回复
写一个 赋值操作符 函数 ....

如果其他符号也需要,
那就都写...

每个符号写一个函数...
mailtocc 2006-08-07
  • 打赏
  • 举报
回复
即使再写个operator=,也出错。
我的初衷不仅是=,而是所有的操作符
langzi8818 2006-08-07
  • 打赏
  • 举报
回复
你的初衷是什么?
自己在写个=函数

64,648

社区成员

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

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