Проблема при компиляции с marshal.h: ошибка C2872: 'IServiceProvider': неоднозначный символ - PullRequest
26 голосов
/ 23 октября 2010

Я пытаюсь использовать библиотеку маршаллинга в своем проекте C ++ / CLI.При компиляции с #include <msclr/marshal.h> я получаю ошибку error C2872: 'IServiceProvider' : ambiguous symbol.Кажется, что в большинстве резолюций предлагается перемещать #include <windows.h>, как здесь -> Неоднозначные ссылки , но у меня их нет.Все, что у меня есть:

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

Как мне отладить эту проблему?

Ответы [ 2 ]

44 голосов
/ 23 октября 2010

Вы, косвенно, в marshal.h включаете его. Он сбрасывает огромное количество идентификаторов в глобальном пространстве имен. Макросы особенно неудобны, многие из них соответствуют именам, используемым в фреймворке.

Многое из того, что делает marshal.h, может делать и класс маршала. Но я не могу помочь вам с этим, вы не упомянули, почему вы хотите его использовать. Вы можете решить эту проблему, поместив директиву *include перед операторами using:

#include <msclr/marshal.h>
using namespace System;
using namespace System::Configuration;
8 голосов
/ 13 августа 2017

Убедитесь, что у вас есть только:

using namespace System;

в файле cpp проекта CLR, а не в заголовке.Visual Studio автоматически добавляет его в заголовок при создании проекта библиотеки классов CLR.В самом cpp включения должны предшествовать «использованию пространства имен».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...