[問題] 程式碼(純虛函式)自動補A?

看板C_and_CPP作者 (麵T)時間9年前 (2016/02/22 09:11), 編輯推噓4(4015)
留言19則, 5人參與, 最新討論串1/1
開發平台(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是為什麼呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.14.5.30 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1456103506.A.43B.html

02/22 09:37, , 1F
我猜跟 windows API 裡的 GetObject 混淆了...
02/22 09:37, 1F

02/22 09:38, , 2F
windows API 裡跟字串有關的函式都會有 A 版跟 W 版
02/22 09:38, 2F

02/22 09:39, , 3F
分別給非 unicode 程式跟 unicode 程式使用
02/22 09:39, 3F

02/22 09:39, , 4F
實際上使用時會根據編譯時的巨集定義把名字 #define 成
02/22 09:39, 4F

02/22 09:40, , 5F
該取的版本; 如果 BCB 沒有實際去抓你的程式碼而只是單純
02/22 09:40, 5F

02/22 09:41, , 6F
使用已有的字典檔或索引檔來給建議大概就會發生這問題
02/22 09:41, 6F

02/22 09:42, , 7F
突然想到一個可能性: 由於引入了 <windows.h> 的關係
02/22 09:42, 7F

02/22 09:43, , 8F
根據上面所言裡面定義了 #define GetObject GetObjectA
02/22 09:43, 8F

02/22 09:43, , 9F
所以事實上你的 class 裡定義的是 GetObjectA 這函式
02/22 09:43, 9F

02/22 09:43, , 10F
但也因為有這個 #define 的關係, 加不加 A 都會順利編譯
02/22 09:43, 10F

02/22 09:45, , 11F
而這個自動完成看起來是類似編譯途中建立的索引拿來用
02/22 09:45, 11F

02/22 09:45, , 12F
所以它的記錄裡面記的是 GetObjectA 這名字, 自然自動補上
02/22 09:45, 12F

02/22 09:46, , 13F
解決法...我現在只想到改函數名一途 Orz
02/22 09:46, 13F

02/22 10:16, , 14F
改名稱後就沒出現了,謝謝
02/22 10:16, 14F

02/22 18:00, , 15F
真是一段淒美的故事
02/22 18:00, 15F

02/23 10:53, , 16F
C沒namespace,悲劇
02/23 10:53, 16F

02/24 10:31, , 17F
這好厲害 XDDDD
02/24 10:31, 17F

03/21 18:37, , 18F
一個月後的補遺: GotW#63 http://www.gotw.ca/gotw/063.htm
03/21 18:37, 18F

03/21 18:38, , 19F
講的正是這篇文章的問題
03/21 18:38, 19F
文章代碼(AID): #1Moc1IGx (C_and_CPP)