为什么拒绝重新声明静态成员

时间:2014-05-13 07:31:36

标签: c++ declaration static-members

我认为我们可以在任何情况下随时重新声明一个名字。但

class A 
{
    static int a;
    static int a;
};

返回编译时错误:

test.cpp:4:13: error: redeclaration of ‘int A::a’
test.cpp:3:13: note: previous declaration ‘int A::a’

实际上可以重新声明哪些名称?

3 个答案:

答案 0 :(得分:2)

根据C ++标准(9.2级成员,第1段)

  

成员不得在成员规范中声明两次,   除了可以声明嵌套类或成员类模板   然后定义,除了枚举可以   引入了一个opaque-enum-declaration,后来又重新声明了   enum-specifier。

答案 1 :(得分:1)

C ++ 11 9.2 / 1 [class.mem]

  

成员不应在 member-specification 中声明两次,除非可以声明嵌套类或成员类模板,然后再定义,除了可以引入枚举 opaque-enum-declaration ,稍后使用枚举说明符重新声明。

答案 2 :(得分:0)

除了其他答案之外,您的代码不仅是重新声明,而且是重新定义,这显然违反了单一定义规则。