PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] forward declaration
作者:
keya
(Lynch)
2014-05-02 23:15:07
開發平台(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?
謝謝!
作者:
carylorrk
(carylorrk)
2014-05-02 23:42:00
A&
作者:
azureblaze
(AzureBlaze)
2014-05-03 00:02:00
http://ideone.com/9CE1Gj
只能開兩個檔案要對A做任何操作一定要先看過他有哪些成員
作者: AstralBrain
2014-05-03 02:09:00
http://ideone.com/aQ56yY
把fun改成template
作者:
kwpn
(ITSST)
2014-05-03 07:11:00
除了template 你也可以fun的A改成傳入A的abstract父類別的reference 並把此父類別定義式寫在fun的上面.
作者:
ah7675
(阿毛)
2014-05-03 12:30:00
void fun(A *a) 這樣不行嗎?
作者:
uranusjr
(â†é€™äººæ˜¯è¶…級笨蛋)
2014-05-03 15:19:00
用指標的話要修改 main, 題目說不行
作者:
kwpn
(ITSST)
2014-05-03 17:01:00
依目前的定義式順序, 不管是A&或是A*都不行, 因為fun()裡有呼叫到operator().
作者: tomnelson
2014-05-03 18:18:00
看來看去,使用template好像是唯一解了!
作者:
keya
(Lynch)
2014-05-04 10:20:00
用template真是我想都沒想過得方法 不太清楚可行的原因謝謝各位參與討論
作者:
kwpn
(ITSST)
2014-05-04 12:19:00
因為用template是編譯到main裡的fun(A())時才產生fun, 這時A的operator()已定義.
作者:
keya
(Lynch)
2014-05-04 22:39:00
謝謝樓上大大的解惑
作者:
carylorrk
(carylorrk)
2014-05-09 03:50:00
搞錯了XD
繼續閱讀
Re: [問題] MFC基礎學習
dearsophia
[問題] 使用批次檔中途錯誤
killer0418
Re: [問題] 關於字元和字串顯示錯誤問題
RealJack
[討論] 與基類極相同的類 怎寫才精煉
Move192
[問題] 關於字元和字串顯示錯誤問題(已解決)
bat205
[問題] 用 recursive 作闖迷宮的設定 求神支援
lalawolala
[問題] 全域變數的問題
watson1988
Re: [問題] Mac上include iostream就不需要time.h?
uranusjr
Re: [問題] 如何將名稱隱藏起來
applecool
[問題] 撰寫"開啟檔案"功能時縮圖的問題
googled
Links
booklink
Contact Us: admin [ a t ] ucptt.com