2016-09-16 9 views
3

私は次のコードを持っていますが、この設定では匿名の名前空間内のxにどのようにアクセスできますかわかりません。どのように教えてください?匿名の名前空間内の変数へのアクセス(C++)

#include <iostream> 

int x = 10; 

namespace 
{ 
    int x = 20; 
} 

int main(int x, char* y[]) 
{ 
    { 
     int x = 30; // most recently defined 
     std::cout << x << std::endl; // 30, local 
     std::cout << ::x << std::endl; // 10, global 
     // how can I access the x inside the anonymous namespace? 
    } 

    return 0; 
} 
+4

あなたがすることはできません。それをしないでください。 –

+0

多くの感謝... !!! –

+0

関連記事:http://stackoverflow.com/questions/9622874/unnamed-namespace-access-rules – NathanOliver

答えて

1

You can't!

それは1を持っていないので、あなたは、その名前で名前空間のメンバーにアクセスすることはできません。
匿名です。

これらのメンバーにアクセスできるのは、既にスコープに引き込まれているためです。

+0

ありがとう、なぜ人々は名前空間の中でこのようなアクセスできない変数を作りましたか?既にスコープに入れられていることによってアクセスすることは、どういう意味ですか?もっと具体的に教えてください。 :) –

+0

@ DongkyuChoi:オブジェクトがその翻訳単位の外で直接参照できないことを意味します。これは、ある意味で、オブジェクトを「ファイルローカル」にします。その "ファイル"のスコープに引っ張られているので、そこに(あなたの質問に表示されているように)それを使うことができますが、他の場所は使用できません。 –

0

匿名同じスコープ内の関数からアクセスする必要があります:

#include <iostream> 

int x = 10; 

namespace 
{ 
    int x = 20; 
    int X() { return x; } 
} 

int main(int x, char* y[]) 
{ 
    { 
     int x = 30; // most recently defined 
     std::cout << x << std::endl; // 30, local 
     std::cout << ::x << std::endl; // 10, global 
     std::cout << X() << std::endl; // 20, anonymous 
     // how can I access the x inside the anonymous namespace? 
    } 

    return 0; 
} 
+0

うわー、私はそれを得た!ご回答どうもありがとうございました!! –

+0

いいえいいえいいえ! X()はユニークなので、外部関数X()を追加すると、内部X()が隠されます。 – Raindrop7

+1

匿名名前空間内のデータにアクセスできるようにするには、次の点を考慮してください。同じ名前の外部にデータを宣言しないでください。 – Raindrop7

関連する問題