使用marshal.h进行编译时出现问题:错误C2872:'IServiceProvider':模糊符号

时间:2010-10-22 20:21:14

标签: c++-cli

我正在尝试在C ++ / CLI项目中使用编组库。使用#include <msclr/marshal.h>进行编译时,我收到错误error C2872: 'IServiceProvider' : ambiguous symbol。大多数决议似乎都在暗示移动#include <windows.h> 喜欢这里的那个 - &gt; Ambiguous references,但我没有那些包括。我只有:

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

如何调试此问题?

2 个答案:

答案 0 :(得分:43)

你间接地,marshal.h包括它。它在全局命名空间中转储了大量标识符。这些宏特别笨拙,很多都与框架中使用的名称相匹配。

marshal.h所做的很多事情也可以由Marshal阶级完成。但我无法帮助你,你没有提到你为什么要使用它。您可以通过在使用语句之前放置#include指令来解决此特定事故:

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

答案 1 :(得分:7)

确保您只有:

using namespace System;

在CLR项目的cpp文件中,而不是在标题中。 创建CLR类库项目时,Visual Studio会自动将其添加到标题中。 在cpp本身中,includes必须位于“using namespace”之前。