命名空间中的类名冲突

conflicting class names in namespace

本文关键字:冲突 命名空间      更新时间:2023-10-16

我有一个不属于任何命名空间的类

A类(*) .

我还有另一个同名但属于命名空间的类

类 A 是命名空间 B 的一部分。

在 xyz.cpp 中,我有以下内容:

#include "..."
using namespace B;
// some code
A::var; // This A should be part of (*) and not namespace B.
// some code

但是由于我的类名冲突,所以我会收到错误。有没有办法解决这个问题?

using namespace 关键字将所有名称从指定的命名空间导入到全局命名空间中。由于已在全局命名空间中声明了class A,因此会导致冲突。

解决方案:不要使用 using namespace B

这实际上是您正在做的事情:

namespace GLOBAL {
    class A { ... };
};
namespace B {
    class A { ... };
};
using namespace B /* export 'B::A' into 'GLOBAL' resulting in a conflict; */ ;

您不得使用

using namespace B;

但使用喜欢

 B::A::var 

相反。