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 回答
0

当您使用 4.7 时,Ideone 正在为您的代码使用 gcc 4.8.1(您可以在自己的链接中看到)

C++ 11 实现有几个不同之处,显然它受到看起来像函数声明的行的影响。

于 2013-11-11T05:22:52.847 回答