看看这个重载函数为什么不能识别

路飞-总裁 2009-11-25 04:34:09
class A{
public:
A(){};
~A()();
void SetRect(CPoint c,boolean bCenter=TRUE);
void SetRect(CRect * pRect=NULL, boolean bRect=FALSE);
void SetRect(int16 x,int16 y,int16 dx=0,int16 dy=0,boolean bRect=FALSE);
};

以上定义了一个类和关于他的3个重载成员函数。

int main(int argc, char* argv[])
{
A a;
int nY = 90;
a.SetRect(0, nY);

return 0;
}
在代码中我写了和上述语句类似的语句,在VS2005下编译器告诉我:
error C2668: 'A::SetRect' : ambiguous call to overloaded function
could be 'void A::SetRect(int16,int16,int16,int16,boolean)'or 'void A::SetRect(CRect *,boolean)'while trying to match the argument list '(int, int)'

当我将上面语句换成
int main(int argc, char* argv[])
{
A a;
int nX = 0;
int nY = 90;
a.SetRect(nX, nY);

return 0;
}时就编译通过了。

编译器是怎么搞的呢,知道的请不吝赐教,谢谢了!~
...全文
94 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjm3055 2009-11-25
  • 打赏
  • 举报
回复
0是NULL,boolean是Int
jackyjkchen 2009-11-25
  • 打赏
  • 举报
回复
通常0可以有两种解释——NULL指针或整数0,明确一下,给个强转
bfhtian 2009-11-25
  • 打赏
  • 举报
回复
看你的Cpoint类型是怎样定义的,编译信息说的很清楚无法识别调用哪一个函数。修改后,你的nX为int型,明确指定调用第三个函数。可能0能默认转化为Cpoint类型
  • 打赏
  • 举报
回复
0 是一个特殊的值,

你需要指针的时候也可以用0赋值给一个指针
dannylee322 2009-11-25
  • 打赏
  • 举报
回复
帮顶。。。

64,654

社区成员

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

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