typedef过的相同类型不同名字不能重载???

mopyman 2007-04-10 11:41:20
typedef void* HBITMAP;
typedef void* HGDIOBJ;//windows中实际类型就是这样的

KBitmap(HBITMAP hBitmap):m_hBitmap(hBitmap){}
KBitmap(HGDIOBJ hGdiObject):m_hBitmap((HBITMAP)hGdiObject){}

以上为KBitmap的2个构造函数,VC能正常编译通过,而bds2006提示2个声明
ambiguous,当然我知道HBITMAP和HGDIOBJ都是void*类型,但是也是用typedef重新申明过的啊,设置什么选项能让bds2006通过编译呢?
...全文
229 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mopyman 2007-04-11
  • 打赏
  • 举报
回复
MSDN上查到的:
typedef HANDLE HBITMAP;
typedef HANDLE HGDIOBJ;

typedef PVOID HANDLE;
typedef void *PVOID;
=======================================
应该是VC与BC对typedef的处理不同,难道typedef类型这么弱吗?
勉励前行 2007-04-11
  • 打赏
  • 举报
回复
用 typedef 也不行的。
typedef int T1 ;
typedef int T2 ;
void Fun(T1 x) ;
void Fun(T2 x) ;
void Fun(int x) ;
這樣不會被視做三個函數,而只會被視作一個。你說: Fun(5)該調用哪 一個函數呢?

VC能編譯通過?應該是VC中 HBITMAP HGDIOBJ 是兩個不一樣的類型吧。
typedef void* HBITMAP;
typedef void* HGDIOBJ;//windows中实际类型就是这样的

勉励前行 2007-04-11
  • 打赏
  • 举报
回复
typedef int T1 ;
typedef int T2 ;
void Fun(T1 x) {}
void Fun(T2 x) {}
void Fun(int x){}
main()
{
int x = 5 ;
Fun(x);
}

把上面的代碼放到VS2005 中去編譯就知道 VS2005 是否支持你所說typedef 機制。
測試一下,能說明很多問題。


int KBitmap(HBITMAP hBitmap){return 1; }
int KBitmap(HGDIOBJ hGdiObject){return 2; }
void *p ;
int A = KBitmap(p) ;
int B = KBitmap(HGDIOBJ(p)) ;
int C = KBitmap(HBITMAP(p)) ;
//這樣也放到 VS2005中去測試一下,看看調用了哪個函數?

用事實來說話吧。BC中這種情況是通不過編譯的。如果VS2005能通過,我倒想知道執行結果是什麼。

daily66 2007-04-10
  • 打赏
  • 举报
回复
看上去你这是重载构造函数,根据你发的内容看,估计是调用这个函数时不知道调用哪个,就像有两个人的名字都叫张三,而你想叫他们其中的一个,你只喊了句张三,他们不知道你叫哪个
mopyman 2007-04-10
  • 打赏
  • 举报
回复
唉,楼上文不对题
huzhangyou 2007-04-10
  • 打赏
  • 举报
回复
我记得回过一次啊
你有重复定义得情况
VC能编译是因为没有同VC中得类重复
而同BCB有重复
可以使用这样得访问方式
::DeleteFile();

就是使用::表示调用系统得
而没有::这个表示BCB得

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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