2012-09-25 66 views
0

我有以下C++类。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类中的静态方法。

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

+0

如果你使用会发生什么定义类之前的命名空间别名? 'namespace xyz xyzns;'应该使'xyzns'成为'xyz'命名空间的别名。 –

回答

4

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

+1

非常感谢,但代码已被其他人编写,我只是想追加我的行或代码。 –

2

在你的特殊情况下,没有直接的解决方案。 Altough C++有elaborated type specifier一个概念,具体为:

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

您可以ASLO试试这个:

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

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

0

在该文件xyz.h是非常简单的,并且依赖于没有别的特殊情况下,你可以这样做:

namespace othername { 
    #include "xyz.h" 
} 

然后用

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