2010-10-22 145 views
24

我正在嘗試在我的C++/CLI項目中使用編組庫。與#include <msclr/marshal.h>編譯時,出現錯誤error C2872: 'IServiceProvider' : ambiguous symbol。大多數決議似乎建議移動#include <windows.h> 就像這裏 - >Ambiguous references,但我沒有那些包括。我所有的是:使用marshal.h編譯問題:錯誤C2872:'IServiceProvider':模糊符號

using namespace System; 
using namespace System::Configuration; 
using namespace std; 
#include <msclr/marshal.h> 

如何調試此問題?

回答

40

你這樣做,間接地,marshal.h包括它。它在全局命名空間中轉儲了大量的標識符。這些宏特別尷尬,它們中的很多與框架中使用的名稱相匹配。

marshal.h所做的很多事情也可以由Marshal類來完成。但是我無法幫助你,你沒有提到你爲什麼要使用它。您可以通過將#include指令前using語句解決這個特定的硬傷:

#include <msclr/marshal.h> 
using namespace System; 
using namespace System::Configuration; 
+0

我想將String ^轉換爲const char * – anivas 2010-10-22 20:48:10

+4

Marshal :: StringToCoTaskMemAnsi + Marshal :: FreeCoTaskMem。 – 2010-10-22 23:15:48

+0

也可以使用System :: String ^來避免在標題中使用 – slater 2014-11-10 19:29:46

2

確保你只有:

using namespace System; 

在CLR項目的CPP文件,而不是在標題中。 創建CLR類庫項目時,Visual Studio自動將其添加到標題中。 在cpp本身中,包含必須位於「using namespace」之前。