2016-11-26 8 views
0
#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; 
+0

同じスコープ内で関数内で同じ名前の変数を2つ持つことはできません(同じものが静的であれば問題ありません)。 – eshb

+0

そうでなければ、どちらがどちらだったか分からないからです。このプログラムはあいまいです。 – EJP

答えて

3

あなたは非静的メソッドでxを参照するときもあなたが意味することになるので、彼らは、同じ名前を持つことができませんか?

言語設計者は、許可することを決めた可能性があります。非静的な1つまたはその逆を好む。しかし、個人的に私は彼らがしなかったのでうれしいです。

+0

まあ、このポインタとfoo ::を両方とも省略できることはわかっています。しかし、彼らは2つの異なる状況から来ているので、それはまだ不思議です。 – hustxujinkang

+0

@hustxujinkangこれは1つの* scope *からのものです:クラススコープです。 – EJP

関連する問題