2017-10-19 86 views
0

我无法运行以下代码。由于命名空间不同,为什么仍然显示如下所述的错误? 错误:冲突声明'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(); 
} 
+1

您正在创建名为'B'的变量。这与命名空间无关。 – Knoep

+0

@Knoep,好的,但对象B是用不同的命名空间创建的吗? – Bahubali

+0

不,'B'是'main()'中的局部变量。它不在名称空间中。做'NS1 :: B'不正确 – vu1p3n0x

回答

3

命名空间只包含什么被宣布在他们里面,你的情况这两个类Base。然而,名为B的这两个对象并未在任何名称空间中声明(但都是函数main的作用域),因此会出现冲突的声明错误。在不同的名称空间中声明的关联类无关紧要。

+0

'B'声明没有在全局命名空间或全局范围中声明(如果它们被定义在main的上面),它们的作用范围为 – vu1p3n0x

+0

@ vu1p3n0x你说得对,我应该更多小心。请给我一分钟的时间来弄清楚如何正确表达这一点。 – Knoep

+0

@ vu1p3n0x那该怎么办?我真的不确定,正确的术语是什么。 – Knoep