C++ 中的命名空间冲突

namespace conflict in c++

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

我有以下C++类。

xyz.h

class xyz {
public:
    static int abc();
};

QWE.H

#include xyz.h
namespace xyz {
class qwe{
public:
    void bnm() {
        int value = xyz::abc();
    }
};
}

如何在此处访问xyz::abc()。我在这里收到一个编译错误,说abc不是xyz的成员。我理解它试图在这个 xyz 命名空间中搜索 abc 方法的原因,而理想情况下它应该得到的是 xyz 类中的静态方法。

有没有办法在不更改命名空间名称的情况下解决此问题?

不要创建与命名空间(或其自己的命名空间)同名的类。

在您的特定情况下,没有直接的解决方案。Altough C++有一个elaborated type specifier的概念,特别是:

xyz       ab;   // The defn is ambiguous.
class xyz ab;   // The ambiguity is resolved.

您也可以尝试一下:

class xyz dummy;
int value = dummy.abc();

C++ 允许使用实例方法的语法调用静态方法。

在文件xyz.h非常简单且几乎不依赖于其他的特殊情况下,您可以这样做:

namespace othername {
   #include "xyz.h"
}

,然后使用

othername::xyz::abc();
namespace hack = xyz;
hack::abc();