c+中的名称空间冲突+; 我有以下C++类。

c+中的名称空间冲突+; 我有以下C++类。,c++,namespaces,C++,Namespaces,xyz.h qwe.h 如何在此处访问xyz::abc()。我在这里得到一个编译错误,它说abc不是xyz的成员。我理解它试图在xyz名称空间中搜索abc方法的原因,而理想情况下,它应该在xyz类中获得一个静态方法 有没有办法在不更改名称空间名称的情况下解决这个问题?不要创建与名称空间同名的类(或创建自己的名称空间)。不要创建与名称空间同名的类(或创建自己的名称空间)。在您的特定情况下,没有直接的解决方案。C++有一个概念:代码>详细说明类型说明< /COD>,特别是: xyz ab

xyz.h

qwe.h

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


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

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

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

在您的特定情况下,没有直接的解决方案。C++有一个概念:代码>详细说明类型说明< /COD>,特别是:

xyz       ab;   // The defn is ambiguous.
class xyz ab;   // The ambiguity is resolved.
您也可以尝试以下方法:

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

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

在您的特定情况下,并没有直接的解决方案。C++有一个概念:代码>详细说明类型说明< /COD>,特别是:

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();

在文件
xyz.h
非常简单且不依赖其他文件的特殊情况下,可以执行以下操作:

namespace othername {
   #include "xyz.h"
}
然后使用

othername::xyz::abc();

很好,谢谢,但是代码已经由其他人编写,我正在尝试追加我的行或代码。很好,谢谢,但是代码已经由其他人编写,我正在尝试追加我的行或代码。如果在定义类之前使用命名空间别名,会发生什么情况<代码>名称空间xyz xyzns应使
xyzns
成为
xyz
命名空间的别名。如果在定义类之前使用命名空间别名,会发生什么情况<代码>名称空间xyz xyzns应使
xyzns
成为
xyz
命名空间的别名。