看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux : gcc 版本 4.1.2 20070925 (Red Hat 4.1.2-33) 問題(Question): 以下的類別程式不曉得如何解釋,請大家提供看法。 預期的正確結果(Expected Output): 據我的認知,兩個輸出式應該都輸出 0 ,但 第一個輸出在編譯時就會有問題,以下為編譯錯誤訊息: error: request for member 'fval' in 'a', which is of non-class type 'AA ()(BB (*)())' 程式碼(Code):(請善用置底文網頁, 記得排版) class BB { private : int y ; public : BB( int s = 0 ) : y(s) {} double val() const { return y ; } }; class AA { private : BB fn ; public : AA( const BB& h ) : fn(h) { } double fval() const { return fn.val() ; } }; int main() { AA a(BB()) ; cout << a.fval() << endl ; // 此行編譯錯誤 AA b(BB(0)); cout << b.fval() << endl ; return 0 ; } -- ※ 編輯: pziyout 來自: 140.115.25.21 (03/06 08:15)
james732:AA a(*(new BB) ; 可以解決 (不過是爛方式XD) 03/06 08:21
pziyout:將 AA 的建構函式改為 AA( BB h ) : fn(h) {} 也是不行 03/06 09:01
stimim:AA a(BB()) 是一個 function prototype 的宣告 03/06 09:42
angleevil:BB()被當成函式,BB (*)()<--.不過c++03以後,這個好像可 03/06 09:55
angleevil:以 03/06 09:55
shadow0326:宣告改成 AA a((BB())); 03/06 10:17
shadow0326:你原本的寫法會被解讀為宣告一個函式a, 回傳值為AA並帶 03/06 10:20
shadow0326:一個未命名參數,參數型態是回傳B且不太參數的函式指標 03/06 10:21
shadow0326: 帶 03/06 10:21
angleevil:有神快拜<(__)> 03/06 10:29
shadow0326: 跟著拜<(__)> 03/06 10:54
james732:原來多一個括號就可以解決了 03/06 11:20
pziyout:謝謝,我想改以 AA a = BB() ; 就不會有分辨不清的問題 03/06 13:25