C++ error: ambiguous symbol. Compiler replacing '*' with '^' to continue parsing

182
26 октября 2018, 07:20

На решения данных ошибок ушло больше целого рабочего дня. Как узнал из разных ресурсов, не можно миксовать managed и not-managed классы. В следствии чего могут возникнуть ошибки типа:

c:\program files (x86)\windows kits\10\include\10.0.17134.0\um\objidl.h(12144): error C3699: '*': cannot use this indirection on type 'IDataObject'

note: compiler replacing '*' with '^' to continue parsing

error C2872: 'IDataObject': ambiguous symbol

Потратил несколько часов чтобы переписать not-managed классы, НО это не решило проблему.

Answer 1

Так как это достаточно популярная проблема среди новеньких, которые только начинают работать с C++/CLI. В моем случае ряд всех этих ошибок был вызван не миксом классов, а библиотекой marshal_cppstd, которая переводит String^ в std::string. После удаления #include код начал компилироваться без ошибок.

Если вы столкнулись с данной проблемой, не спишите переписывать и подстраивать not-managed классы, а так же чистить header файлы от using namespace ... и проверьте не используется ли где-то в коде именно эта библиотека.

READ ALSO
Объясните, что значит string(1, char)

Объясните, что значит string(1, char)

Прохожу курс по с++ и там в рекомендуемом решении задачи написано:

153
простое наследование JAVA

простое наследование JAVA

Суть проста, есть два класса: Main и Field

173