代码之家  ›  专栏  ›  技术社区  ›  anivas

使用marshal.h编译时出现问题:错误C2872:“IServiceprovider”:不明确的符号

  •  26
  • anivas  · 技术社区  · 14 年前

    我试图在我的C++/CLI项目中使用编组库。编译时使用 #include <msclr/marshal.h> 我得到错误 error C2872: 'IServiceProvider' : ambiguous symbol . 大多数决议似乎都建议采取行动 #include <windows.h> 就像这里的那个-> Ambiguous references 但是我没有这些包括。我只有:

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

    如何调试此问题?

    2 回复  |  直到 7 年前
        1
  •  43
  •   Hans Passant    14 年前

    你间接地说,元帅包括在内。它在全局命名空间中转储大量的标识符。宏尤其笨拙,其中许多宏与框架中使用的名称相匹配。

    很多marshal.h所做的事情也可以由marshal类完成。但我帮不了你,你没提你为什么要用它。您可以通过将include指令 之前 使用说明:

    #include <msclr/marshal.h>
    using namespace System;
    using namespace System::Configuration;
    
        2
  •  7
  •   Matan L.    7 年前

    确保您只有:

    using namespace System;
    

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