楼主:
noodleT (面T)
2016-02-22 09:11:44开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
BCB
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
OpenGL
问题(Question):
class ManagerBase
{
//略
virtual const ObjectBase *GetObject(unsigned int index) const = 0;
}
在抽象类别 ManagerBase 里面定义一个虚拟函式,
该虚拟函式回传值 ObjectBase* 也是抽象类别。
这时候我打
ManagerBase *manager;
manager->GetObjectA //自动建立程式码的功能表就自己跳出 GetObjectA
//反而没有GetObject
但不论有没有补A,程式编译都正常,
请问编译器帮我补A是为什么呢?
作者:
LPH66 (-6.2598534e+18f)
2016-02-22 09:37:00我猜跟 windows API 里的 GetObject 混淆了...windows API 里跟字串有关的函式都会有 A 版跟 W 版分别给非 unicode 程式跟 unicode 程式使用实际上使用时会根据编译时的宏定义把名字 #define 成该取的版本; 如果 BCB 没有实际去抓你的程式码而只是单纯使用已有的字典档或索引档来给建议大概就会发生这问题突然想到一个可能性: 由于引入了 <windows.h> 的关系根据上面所言里面定义了 #define GetObject GetObjectA所以事实上你的 class 里定义的是 GetObjectA 这函式但也因为有这个 #define 的关系, 加不加 A 都会顺利编译而这个自动完成看起来是类似编译途中建立的索引拿来用所以它的记录里面记的是 GetObjectA 这名字, 自然自动补上解决法...我现在只想到改函数名一途 Orz