Ошибка при компиляции с помощью marshal.h: ошибка C2872: "IServiceProvider": неоднозначный символ
Я пытаюсь использовать библиотеку marshalling в моем проекте С++/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>
Как отладить эту проблему?
Ответы
Ответ 1
Вы делаете, косвенно, marshal.h включает его. Он сбрасывает огромное количество идентификаторов в глобальном пространстве имен. Макросы особенно неудобны, многие из них соответствуют именам, используемым в рамках.
Множество вещей, которые marshal.h делает, также может быть сделано классом маршала. Но я не могу с этим поделать, вы не упомянули, почему вы хотите его использовать. Вы можете решить эту проблему, поставив директиву #include перед операциями using:
#include <msclr/marshal.h>
using namespace System;
using namespace System::Configuration;
Ответ 2
Убедитесь, что у вас есть только:
using namespace System;
в файле cpp проекта CLR, а не в заголовке.
Visual studio автоматически добавляет его в заголовок при создании проекта библиотеки классов CLR.
В самом cpp, include должен предшествовать "использованию пространства имен".