c ++中的命名空间冲突

时间:2012-09-25 21:02:27

标签: c++ namespaces

我有以下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的成员。我理解它试图在这个abc命名空间中搜索xyz方法的原因,而理想情况下它应该是xyz类中的静态方法。

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

4 个答案:

答案 0 :(得分:3)

不要创建一个与命名空间同名的类(或者它自己的命名空间)。

答案 1 :(得分:2)

在您的特定情况下,没有直接的解决方案。 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 ++允许使用实例方法的语法调用静态方法。

答案 2 :(得分:1)

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

namespace othername {
   #include "xyz.h"
}

然后使用

othername::xyz::abc();

答案 3 :(得分:1)

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