重名的问题

donysk 2005-04-04 05:15:04
最近遇到了这样一个问题:
TPoint curPos;
GetCursorPos(curPos);

提示:Cann't convert tagPoint* to TPoint
经检查,发现是C++builder6 的全局函数与WinAPI的函数重名了,即有两个
GetCursorPos,而且参数类型不一样,怎样区别开这两个函数呢?
...全文
184 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
痞子酷 2005-04-07
  • 打赏
  • 举报
回复
GetCursorPos(&curPos);
Waiting4you 2005-04-07
  • 打赏
  • 举报
回复
C++的多态性怎么不管用啊~~
wilsonloveada 2005-04-07
  • 打赏
  • 举报
回复
::GetCursorPos(&curPos); //全局函数
donysk 2005-04-06
  • 打赏
  • 举报
回复
To leonatcs(LeonKennedy) :
运行正确,不过好麻烦。
我那个程序已经用API搞定了,不过还是想钻牛角尖,呵呵。
donysk 2005-04-06
  • 打赏
  • 举报
回复
To kyodan(潜水~潜水) : 你那是什么道理,试了下好像不行。
Sephil 2005-04-06
  • 打赏
  • 举报
回复
GetCursorPos(&curPos);
leonatcs 2005-04-06
  • 打赏
  • 举报
回复
理解:)
leonatcs 2005-04-05
  • 打赏
  • 举报
回复
郁闷!加qcontrols.hpp带来的麻烦。
用:GetCursorPos(tagPoint*);//winAPI 不行吗?不就没这些麻烦了。

如果一定要用:GetCursorPos(TPoint&);//vcl中的函数,
把所有提示的错误中,前面那个不带名字空间的类型换成后面的带名字空间的。
比如把头文件中第十九行的:TPopupMenu 换成 Menus::TPopupMenu,其他各行也是如此。

我试了,编译时应该有提示,记得一律选no。

donysk 2005-04-05
  • 打赏
  • 举报
回复
加上头文件后,出现了这些错误:
[C++ Error] Unit1.h(19): E2015 Ambiguity between 'TPopupMenu' and 'Menus::TPopupMenu'
[C++ Error] Unit1.h(20): E2015 Ambiguity between 'TMenuItem' and 'Menus::TMenuItem'
[C++ Error] Unit1.h(28): E2015 Ambiguity between 'TMessage' and 'Messages::TMessage'
[C++ Error] Unit1.h(29): E2015 Ambiguity between 'PMessage' and 'Messages::PMessage'
[C++ Error] Unit1.h(30): E2015 Ambiguity between 'TMessage' and 'Messages::TMessage'
[C++ Error] Unit1.cpp(42): E2015 Ambiguity between 'TMessage' and 'Messages::TMessage'
[C++ Error] Unit1.cpp(46): E2316 'LParam' is not a member of 'TMessage'
kyodan 2005-04-05
  • 打赏
  • 举报
回复
注释掉头文件,注释掉GetCursorPos(curPos);
全编译
0Error
去掉注释,make
leonatcs 2005-04-05
  • 打赏
  • 举报
回复
只要include了头文件,直接用GetCursorPos也行,编译器会自动判断是哪一个。
leonatcs 2005-04-05
  • 打赏
  • 举报
回复
#include <qcontrols.hpp>

void __fastcall TForm1::FormCreate(TObject *Sender)
{
TPoint p;
Qcontrols::GetCursorPos(p);
ShowMessage(IntToStr(p.x));
}
donysk 2005-04-04
  • 打赏
  • 举报
回复
哦,那是我打错了,默认的确实是winAPI,
各位高手继续~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kyodan 2005-04-04
  • 打赏
  • 举报
回复
既然提示Cann't convert tagPoint* to TPoint
那么编译器调用的就应该是GetCursorPos(TPoint&)
donysk 2005-04-04
  • 打赏
  • 举报
回复
说白了就是
GetCursorPos(tagPoint*);//winAPI
GetCursorPos(TPoint&);//vcl中的函数
在cb中默认是winAPI,怎么调用vcl中的函数。
donysk 2005-04-04
  • 打赏
  • 举报
回复
不是在.h中定义的,是CB中的外部函数
Friecin 2005-04-04
  • 打赏
  • 举报
回复
全局???

如果在Form1.h种声明的,可以:
this->GetCursorPos(curPos);
Friecin 2005-04-04
  • 打赏
  • 举报
回复
::GetCursorPos(curPos); //WinAPI的函数
donysk 2005-04-04
  • 打赏
  • 举报
回复
默认的就是WinAPI的函数,现在是怎么调用CB的全局函数
myy 2005-04-04
  • 打赏
  • 举报
回复
::GetCursorPos(curPos); //WinAPI的函数

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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