[問題] 無法解釋的簡單類別問題

看板C_and_CPP (C/C++)作者 (pziyout)時間14年前 (2012/03/06 08:06), 編輯推噓2(2011)
留言13則, 5人參與, 最新討論串1/1
開發平台(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)

03/06 08:21, , 1F
AA a(*(new BB) ; 可以解決 (不過是爛方式XD)
03/06 08:21, 1F

03/06 09:01, , 2F
將 AA 的建構函式改為 AA( BB h ) : fn(h) {} 也是不行
03/06 09:01, 2F

03/06 09:42, , 3F
AA a(BB()) 是一個 function prototype 的宣告
03/06 09:42, 3F

03/06 09:55, , 4F
BB()被當成函式,BB (*)()<--.不過c++03以後,這個好像可
03/06 09:55, 4F

03/06 09:55, , 5F
03/06 09:55, 5F

03/06 10:17, , 6F
宣告改成 AA a((BB()));
03/06 10:17, 6F

03/06 10:20, , 7F
你原本的寫法會被解讀為宣告一個函式a, 回傳值為AA並帶
03/06 10:20, 7F

03/06 10:21, , 8F
一個未命名參數,參數型態是回傳B且不太參數的函式指標
03/06 10:21, 8F

03/06 10:21, , 9F
03/06 10:21, 9F

03/06 10:29, , 10F
有神快拜<(__)>
03/06 10:29, 10F

03/06 10:54, , 11F
跟著拜<(__)>
03/06 10:54, 11F

03/06 11:20, , 12F
原來多一個括號就可以解決了
03/06 11:20, 12F

03/06 13:25, , 13F
謝謝,我想改以 AA a = BB() ; 就不會有分辨不清的問題
03/06 13:25, 13F
文章代碼(AID): #1FLLKY5N (C_and_CPP)
文章代碼(AID): #1FLLKY5N (C_and_CPP)