我有以下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
类中的静态方法。
有没有办法在不更改命名空间名称的情况下解决这个问题?
答案 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();