为什么“function definition does not declare parameters”错误。#include iostreamusing namespace std
为什么“function definition does not declare parameters”错误。
#include <iostream>
using namespace std;
class Obj {
static const int in[];
public:
void print() const {
for (int i = 0; i < 2; i++)
cout << in[i] << endl;
}
};
const int Obj::in[] {
1, 3
};
int main()
{
Obj o;
o.print();
return 0;
}
上面这段代码在xcode里可以正常运行并输出1和3。但是为什么我在shell里用g++直接编译会报出“function definition does not declare parameters”的错误?求大神指点。
[解决办法]
g++4.0版本运行错误和楼主一样。
将const int Obj::in[] = {1, 3}; 加上等号,可编译通过。
应该是g++版本对C++语法支持造成的吧!楼主更新一下g++的版吧!
[解决办法]
这样编译即可:
g++ -std=c++0x main.cpp
[解决办法]
不同的编译器优化条件不一样的!
比如:void main()vc是可以编译过的!但是g++却不过!
这些各自的编译器优化性质不一样的!所以还是按规范写比较靠谱!
[解决办法]
文档是C++11的标准文档.
也可以参考
http://zh.wikipedia.org/wiki/C%2B%2B11#.E7.B5.B1.E4.B8.80.E7.9A.84.E5.88.9D.E5.A7.8B.E5.8C.96
中的统一的初始化.
c++11中的braced-init-list.
可以对比一下参考文法:
c++2003
initializer:
= initializer-clause
( expression-list )
initializer-clause:
assignment-expression
{ initializer-list ,opt}
{ }
initializer-list:
initializer-clause
initializer-list , initializer-clause
c++2011:
initializer:
brace-or-equal-initializer
( expression-list )
brace-or-equal-initializer:
= initializer-clause
braced-init-list
initializer-clause:
assignment-expression
braced-init-list
initializer-list:
initializer-clause ...opt
initializer-list , initializer-clause ...opt
braced-init-list:
{ initializer-list ,opt }
{ }
