次のコードを実行することができません。ネームカードが異なるので、なぜ以下に述べるようにエラーを表示しているのですか? エラー: 'NS2 :: Base B'という競合する宣言 NS2 :: Base B;C++:名前空間の競合する宣言エラー
#include<iostream>
using namespace std;
namespace NS1
{
class Base
{
int x=4;
public:
void disp()
{
cout<<x<<endl;
}
};
}
namespace NS2
{
class Base
{
int x=7;
public:
void disp()
{
cout<<x<<endl;
}
};
}
int main()
{
NS1::Base B;
NS1:B.disp();
NS2::Base B;
NS2::B.disp();
}
あなたは 'B'と呼ばれる変数を作成しています。これは名前空間とは関係ありません。 – Knoep
@Knoep、Ok、でもオブジェクトBは異なる名前空間で作成されますか? – Bahubali
いいえ、 'B'は' main() 'のローカル変数です。名前空間にはありません。 'NS1 :: B'を行うのは間違っています – vu1p3n0x