看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): Complie Error 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): strcut A incomplete type 程式碼(Code):(請善用置底文網頁, 記得排版) #include <iostream> using namespace std; struct A; void fun(A a){ a(); } struct A{ void operator()(){cout << "A() called" << endl;} }; int main(){ fun(A()); return 0; } 補充說明(Supplement): 這是一題測驗題目 如果將fun寫到struct A後面即可compile正確 請問有什麼方式在不更改code順序 也不更改main以及struct A的前提下 只能更改fun本身以及之前的code 可以避免incomplete type? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.162.85.51 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1399043710.A.0F2.html
carylorrk:A& 05/02 23:42
azureblaze:http://ideone.com/9CE1Gj 只能開兩個檔案 05/03 00:02
azureblaze:要對A做任何操作一定要先看過他有哪些成員 05/03 00:02
AstralBrain:http://ideone.com/aQ56yY 把fun改成template 05/03 02:09
kwpn:除了template 你也可以fun的A改成傳入A的abstract父類別的ref 05/03 07:11
kwpn:erence 並把此父類別定義式寫在fun的上面. 05/03 07:13
ah7675:void fun(A *a) 這樣不行嗎? 05/03 12:30
uranusjr:用指標的話要修改 main, 題目說不行 05/03 15:19
kwpn:依目前的定義式順序, 不管是A&或是A*都不行, 因為fun()裡有呼 05/03 17:01
kwpn:叫到operator(). 05/03 17:02
tomnelson:看來看去,使用template好像是唯一解了! 05/03 18:18
keya:用template真是我想都沒想過得方法 不太清楚可行的原因 05/04 10:20
keya:謝謝各位參與討論 05/04 10:21
kwpn:因為用template是編譯到main裡的fun(A())時才產生fun, 這時A 05/04 12:19
kwpn:的operator()已定義. 05/04 12:19
keya:謝謝樓上大大的解惑 05/04 22:39
carylorrk:搞錯了XD 05/09 03:50