函数重载的一个怪异的现象

thinkperson_x202 2012-07-31 12:34:26
以下是函数重载的声明:
//--------------------------------------------------------------------
// Summary:
// 设置属性值
// Parameters:
// [in] szAttrName - 属性名称
// [in] szAttrValue - 属性值
//--------------------------------------------------------------------
um_ReturnCode SetAttribute(LPCumWSTR szAttrName, LPCumWSTR szAttrValue);
um_ReturnCode SetAttribute(const CumString& strAttrName, um_INT nAttrValue);
um_ReturnCode SetAttribute(const CumString& strAttrName, um_BOOL bAttrValue);
um_ReturnCode SetAttribute(const CumString& strAttrName, um_ID idAttrValue);
um_ReturnCode SetAttribute(const CumString& strAttrName, um_FLOAT fAttrValue);
um_ReturnCode SetAttribute(const CumString& strAttrName, um_DOUBLE dAttrValue);

如果我在CPP文件中这样调用SetAttribute()

pNodeCrossRef->SetAttribute(XML_ATTR_DISPTYPE, 0);
或者
pNodeCrossRef->SetAttribute(XML_ATTR_DISPTYPE, (um_INT)0);
都会出现下面的错误:

error C2666: 'CXMLDOMNode::SetAttribute' : 6 overloads have similar conversions
2> f:\office\trunk\__internal\headers\umbase\XMLDOMNode.h(389): could be 'um_ReturnCode CXMLDOMNode::SetAttribute(const CumString &,um_DOUBLE)'
2> f:\office\trunk\__internal\headers\umbase\XMLDOMNode.h(388): or 'um_ReturnCode CXMLDOMNode::SetAttribute(const CumString &,um_FLOAT)'
2> f:\office\trunk\__internal\headers\umbase\XMLDOMNode.h(387): or 'um_ReturnCode CXMLDOMNode::SetAttribute(const CumString &,um_ID)'
2> f:\office\trunk\__internal\headers\umbase\XMLDOMNode.h(386): or 'um_ReturnCode CXMLDOMNode::SetAttribute(const CumString &,um_BOOL)'
2> f:\office\trunk\__internal\headers\umbase\XMLDOMNode.h(385): or 'um_ReturnCode CXMLDOMNode::SetAttribute(const CumString &,um_INT)'
2> f:\office\trunk\__internal\headers\umbase\XMLDOMNode.h(379): or 'um_ReturnCode CXMLDOMNode::SetAttribute(LPCumWSTR,LPCumWSTR)'
2> while trying to match the argument list '(const wchar_t [4], um_INT)'

但是如果我这样写就不会出错:
pNodeCrossRef->SetAttribute(XML_ATTR_DISPTYPE, 1);


我的疑问是以下几点:
(1)为什么pNodeCrossRef->SetAttribute(XML_ATTR_DISPTYPE, 1);正确,而
pNodeCrossRef->SetAttribute(XML_ATTR_DISPTYPE, 0);错误?
(2)为什么强制转换后,pNodeCrossRef->SetAttribute(XML_ATTR_DISPTYPE, (um_INT)0);依然错误?
请问造成以上现象的根源是什么?
...全文
79 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
翅膀又硬了 2012-07-31
  • 打赏
  • 举报
回复
可能 0 能表示的类型太多了吧 1 会被默认为int
pathuang68 2012-07-31
  • 打赏
  • 举报
回复
关键要看um_ReturnCode和其它那些数据类型是怎么定义的?
竞天问 2012-07-31
  • 打赏
  • 举报
回复
你那些自定义类型都是什么啊

65,210

社区成员

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

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