我写了以下代码:
#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版。
答案 0 :(得分:2)
这通常被称为C ++最令人烦恼的解析。当你做
之类的事情int f();
编译器将其读作函数原型,声明返回f
的函数int
。如果您使用的是C ++ 11,则应该执行
int f{}; // f initialized to 0
如果您不使用C ++ 11,请确保立即初始化变量。
答案 1 :(得分:2)
你在这里错过了一个分号:
int v()
^
应该是:
int v() ;
这是一个函数声明,但不清楚它是什么意思。如果您想初始化v
,那么以下内容将起作用:
int v(0) ;
或 C ++ 11 :
int v{0} ;
答案 2 :(得分:1)
你忘了分号后
int v();
答案 3 :(得分:0)
当您使用4.7时,Ideone正在使用gcc 4.8.1(您可以在自己的链接中看到)
有关于C ++ 11实现的several difference,显然它受到看起来像函数说明的行的影响。