→ EdisonX:那句話的註解我懷疑是不是正確的說 XD 12/11 22:26
我把出處列出來好了
The design and evolution of c++ (簡體中文版) p126
原文版本 141~142
※ 編輯: descent 來自: 58.114.140.230 (12/11 22:31)
推 yvb:簡單說, 加一列 static int Q();跟類似宣告,去編看看就知道了. 12/11 22:36
→ yvb:static int Q() 跟 static int Q(void) ==> error 12/11 22:38
→ yvb:static int Q(int) ==> pass 12/11 22:38
#include <iostream>
#include <typeinfo>
using namespace std;
typedef int P();
typedef int Q();
class X
{
static int Q();
static int Q(int);
};
int main(int argc, char *argv[])
{
return 0;
}
都會過, 我猜你不是放在 class X 裡頭。
推 EdisonX:我懷疑是不是我的能力也有問題了 Orz , 用 Q 定義一個函式 12/11 22:38
→ EdisonX:應是用 Q func{ return 0;} 寫下 static P(Q){...} 噴 err 12/11 22:39
→ EdisonX:沒誤會的話,vc上err指的是不能傳遞一個函式,而要函式指標 12/11 22:40
我用 typeid 確定 P 是 function, 不過這樣的宣告法, 完全不懂其意思。
※ 編輯: descent 來自: 58.114.140.230 (12/11 23:00)
推 yvb:我是放在 class X 裏頭沒錯呀. 如果將 Q(int) 換為 Q(void) 12/12 00:23
→ yvb:編譯時會出現 12/12 00:24
→ yvb:11:13: error: 'static int X::Q()' cannot be overloaded 12/12 00:24
→ yvb:10:11: error: with 'static int X::Q()' 12/12 00:24
→ yvb:我是使用 g++ 4.6.3 . 12/12 00:25
→ yvb:再試 g++ 4.2.4 及 g++ 3.3.4 也相同情況, 12/12 00:29
→ yvb:3.3.4 的訊息稍有不同: 12/12 00:30
→ yvb:error: `static int X::Q()' and `static int X::Q()' cannot 12/12 00:30
→ yvb: overloaded 12/12 00:30
→ yvb:9: warning: all member functions in class `X' are private 12/12 00:31
→ yvb:但基本上 error 的意思一樣 (error: ... ==> 11: error: ...) 12/12 00:32
推 yvb:如果 Q(int) 下移兩列, 就出問題了, 編譯時會出現 12/12 00:36
→ yvb:12:17: error: 'int Q(int)' redeclared as different kind of 12/12 00:37
→ yvb: symbol 12/12 00:37
→ yvb:6:13: error: previous declaration of 'typedef int Q()' 12/12 00:37
→ yvb:不放 class X 裏頭根本就有問題呀. 12/12 00:38
→ yvb:剛沒注意. Class X 中, static int Q(); 我是寫 static P(Q); 12/12 00:40
→ yvb:然後空兩格的部分我是直接按一個 <TAB>. 12/12 00:44
→ yvb:也就是 line 8-12: 12/12 00:45
→ yvb:class X 12/12 00:45
→ yvb:{ 12/12 00:46
→ yvb: static P(Q); 12/12 00:46
→ yvb: static int Q(void); 12/12 00:46
→ yvb:}; 12/12 00:46
→ yvb:其中的 Q(void) 換為 Q(int) 時, 編輯才會過. 12/12 00:47
→ yvb:另外 typedef int Q(); 沒寫也沒差. 12/12 00:49
推 yvb:去找了一下那段 code, 它有下一句註解: 12/12 01:10
→ yvb: // the parentheses around Q are redundant 12/12 01:11
→ yvb:意思 static P(Q); 就是 static P Q; 啊. 12/12 01:13
推 yvb:現在才發現, 原來後面有人回文了 @@ 12/12 01:18