- ベストアンサー
c言語のエラーについて
VC++でプログラムを作っていますが、コンパイルする際に以下のエラーが表示されました。 error C2064: 関数ポインタとして評価されない式を使って、関数を呼び出そうとしました。 どのような意味か教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1と#2の方の逆のパターンも考えられます。 定義済みの関数と同名の変数を宣言している場合もあります。 http://www.okweb.ne.jp/kotaeru.php3?q=325817
その他の回答 (2)
- toysmith
- ベストアンサー率37% (570/1525)
エラー部分のソースがわからないので原因を特定できませんが… C言語では関数をポインタとして認識します。 func()は「関数func()を呼び出す」ではなく、「関数ポインタfuncに呼び出し演算子()で評価する」という解釈です。 関数呼び出しは「項(引数リスト)」という形式です。 「項(引数リスト)」を利用する式はすべて関数式として解釈しようとします。 しかし、「項(引数リスト)」の項が関数ポインタでないとき「関数としての呼び出しができない」というコンパイルエラーとなります。 #include <stdio.h> main(void) { int a[10] ; a(0) ;//←Error C2063 a[0](0) ;//←Error C2064 return (0) ; } C2063は「項が関数ポインタでないオブジェクト」であるときに発生します。 C2064は「項が関すポインタでない式」であるときに発生します。 ソースをよく読めば「式()」形式になっているところがあると思います。 よくやるミスとしては ・()で演算順序を変えようとして演算子を書き忘れる ・ifやforなどの制御キーワードのタイプミス ・関数名/関数ポインタ変数のタイプミス などなど...
- a-kuma
- ベストアンサー率50% (1122/2211)
関数とはみなせない識別子にかっこ "()" をつけると、このように文句をいわれます。 例えば、 int main() { int xxx; xxx(); /* ← 整数に括弧をつけても駄目だよねえ */ return 0; } また、c++ の場合には、関数の方に対するチェックが厳しいですから、 ・関数のプロトタイプ宣言がない or 宣言を持つファイルをインクルードしてない ・プロトタイプ宣言と違う型の引数を使っている などでも、このエラーが出ると思います。
お礼
int select; void select(void); がだぶっていました。ありがとうございました。