为什么“function definition does not declare parameters”异常

为什么“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


引用:
#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”的错误?求大神指点。


[解决办法]
引用:
Quote: 引用:

 const int Obj::in[] = { 1, 3 }; //你不觉得需要个赋值符号么

加上=是可以正常运行,但是我更想知道的是为什么在xcode中可以正常运行?
我的g++版本是

arthurtekiMacBook-Air:程序代码 arthur$ g++ -v
Using built-in specs.
Target: i686-apple-darwin11
Configured with: /private/var/tmp/llvmgcc42/llvmgcc42-2336.11~182/src/configure --disable-checking --enable-werror --prefix=/Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2 --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-prefix=llvm- --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin11 --enable-llvm=/private/var/tmp/llvmgcc42/llvmgcc42-2336.11~182/dst-llvmCore/Developer/usr/local --program-prefix=i686-apple-darwin11- --host=x86_64-apple-darwin11 --target=i686-apple-darwin11 --with-gxx-include-dir=/usr/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)


xcode 版本是4.6.3


不同的编译器优化条件不一样的!
比如: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 }
{ }