Подтвердить что ты не робот

Ошибка при компиляции с помощью 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>

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

4b9b3361

Ответ 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 должен предшествовать "использованию пространства имен".