C ++:名称空间冲突声明错误

时间:2017-10-19 01:11:47

标签: c++ namespaces

我无法运行以下代码。由于名称不同,为什么仍然会出现如下所述的错误?      错误:冲突声明'NS2 :: Base B'          NS2 :: Base B;

#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 个答案:

答案 0 :(得分:3)

命名空间仅包含在其中声明的内容,在您的情况下包含两个类Base。但是,名为B的两个对象未在任何名称空间中声明(但都是作用于函数main),因此会出现冲突的声明错误。在不同名称空间中声明的关联类并不重要。