2012-09-25 71 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();