2011-03-28 60 views
2

我嘗試編譯C++/CLI文件,該文件包含定義了類「Foo」的頭文件(本機,第三方)。此外,我通過#using「Bar.dll」使用C#dll,其中命名空間「Foo」已定義。編譯器給出錯誤C2872「Foo是不明確的符號」。C++/CLI - 名稱空間和類的模糊符號

我不知道在哪個命名空間中,原生類「Foo」被定義爲頭文件中的類定義沒有嵌套在某個名稱空間中。所以我假設類「Foo」可能不在命名空間中(這在C++中是可行的,不是嗎?)。否則,我會用它的命名空間來指定類「Foo」,以使它對於編譯器是特定的。

我有可能重命名「Bar.dll」中使用的名稱空間「Foo」,但我正在尋找一種不同的解決方案來保持名稱空間。實際上,一個類和一個命名空間是不同的元素 - 但我猜不是爲了C++/cli編譯器?

提前THX Michbeck

回答

1

我不確定這是否可行,但值得一試。

namespace FooNamespace = Foo; 
typedef Foo FooClass; 

命名空間指令僅在名稱空間上有效,而不在類上有效。反之亦然與typedef。您應該可以在代碼中使用FooClassFooNamespace。 ::富:

+0

是,THX這個類和命名空間「foo」的區別!電賀 – Michbeckable 2011-03-30 08:08:13

1

我碰到一個巨大的專有代碼庫,這將是改變太貴了類似的問題。這個問題似乎彈出我,當我嘗試以下方法:

using namespace System; 

我包括代碼恰好有自己的Enum類,如果你開始使用「系統」命名空間,那麼這兩個名字衝突。爲了解決這個問題,我簡單地把它放在命名空間標題裏面。

namespace MyNamespace 
{ 
    using namespace System; 

    ... 
} 

這可能不適用於#using指令,但它可能值得一試。

#using "Bar.dll" 

namespace MyNamespace 
{ 

    using namespace System; 
    using namespace Foo; 

    ... 
} 
1

除了爲類「富」(禮貌大衛偏航)問題的類型定義可以通過使用類「富」的全局命名空間來解決。 typedef的工作 - 所以編譯器可以在「Bar.dll」

相關問題