为什么静态数据成员与非静态数据成员的名称不同?

时间:2016-11-26 02:04:58

标签: c++

#include<stdio.h>
#include<vector>
#include<iostream>
using namespace std;

int x = 1;
class foo
{
public:
    foo()
    {
        x = 3;
    }
    static int x;
    void bar() const
    {
        cout << x << endl;
    }
    int x;
};
int foo::x = 2;
int main()
{
    cout << "Hello, world!" << endl;
    return 0;
}

这是编译器输出:

test.cc:19:9: error: ‘int foo::x’ conflicts with a previous declaration
     int x;
         ^
test.cc:14:16: note: previous declaration ‘int foo::x’
     static int x;

1 个答案:

答案 0 :(得分:3)

它们不能具有相同的名称,因为当您在非静态方法中引用x时,您指的是哪一个?

语言设计师可能决定允许它,例如更喜欢非静态或反向。但我个人很高兴他们没有。