2011-01-02 9 views
0

関数ポインタ私A.hファイルで


Node RemoveString(Node (*)(char,Node)); 
Node Minimum(char, Node); 


私A.cファイルで

Node Minimum(char type, Node node) {......} 
Node RemoveString(Node(*Minimum)(char, Node)) {...} 


void Test_Function(Node (*)(char,Node)); 

を提出します私のBC州

void Test_Function(Node(*Minimum)(char, Node)) {...} 


私のmain.cで

Test_Function(Node(*Minimum)(char, Node));//This line has error. 


ファイルノードがああ
Bhの中で定義されているが、 "あ"
main.cのは "Bhの" が含ま含ま


コンパイラは、ハットエラー: 'Node'の前に期待される表現
誰にでも私になぜ教えてもらえますか?

+0

ノードはどこに定義されていますか? –

+2

'Test_Function(&Minimum);試してください – Timo

+0

ノードはA.hで定義されています – Xitrum

答えて

4

関数を呼び出すと、完全な定義ではなく関数の名前を使用するだけです。したがって、この行:

Test_Function(Node(*Minimum)(char, Node)); 

は次のようになります。もちろん

Test_Function(&Minimum); 

は、あなたもこの文の前に(すなわち、ファイルが含まれています)機能Test_Functionと最小が定義されていることを確認する必要があります。

+4

あなたが望むなら、 '&'は必要でさえありません。 –

+0

ああ、ええ、それは良い点です。 Chrisに感謝します。 – Rafid

+0

この "Test_Function(&Minimum);"を使用するとうまく動作します。これは "Test_Function(Minimum);" – Xitrum

0

これはcというタグが付けられているので、Cコンパイラ(C++ではなく)を使用しています。その場合は、各宣言にstruct Nodeと書くか、typedefを使用する必要があります。

+1

幻覚のための実験室で水道を走らせてください。 – jpinto3912

1

引数がTest_Functionである式は、関数ポインタではなく型です。関数ポインタは、関数の名前に過ぎません。

Test_Function(Minimum);