作者:
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