1

次のコードを書きました。

#include <iostream>
using namespace std;

int main()
{
    int v()
    return 0;
}

ideoneで実行したところ、正常にコンパイルされました。test1.cppコンピューターのファイルに同じコードがあり、実行したg++ test1.cppところ、次のエラーが発生しました。

./test1.cpp: In function ‘int main()’:
./test1.cpp:7:2: error: a function-definition is not allowed here before ‘return’

なぜこれが起こるのですか?これはバグですか?Linux mint、gcc バージョン 4.7 を使用しています。

4

4 に答える 4

2

これは一般に、C++ で最も厄介な解析として知られています。あなたが何かをするとき

int f();

コンパイラはこれを関数プロトタイプとして読み取り、fを返す関数を宣言しますint。C++11 を使用している場合は、代わりに次のようにする必要があります。

int f{}; // f initialized to 0

C++11 を使用していない場合は、すぐに変数を初期化してください。

于 2013-11-11T05:20:35.230 に答える
2

ここにセミコロンがありません:

 int v()
        ^

次のようにする必要があります。

 int v() ;

これは関数宣言ですが、それが意図されたものであることは明らかではありません。初期化する場合vは、次のようにします。

 int v(0) ;

またはC++11の場合:

 int v{0} ; 
于 2013-11-11T05:20:47.387 に答える
1

の後にセミコロンを忘れました

int v();
于 2013-11-11T05:19:58.803 に答える