Неоднозначность между IID_IDropTarget и Virtualtrees::IID_IDropTarget
-
19-09-2019 - |
Вопрос
В настоящее время я прохожу процесс рефакторинга, чтобы сократить время компиляции, и столкнулся со следующей ошибкой компиляции:
[C++ Error] some_class.cpp(53): E2015 Ambiguity between 'IID_IDropTarget' and 'Virtualtrees::IID_IDropTarget'
Строка кода, на которую он указывает:
if (iid == IID_IUnknown || iid == IID_IDropTarget)
Если я использую Virtualtrees::IID_IDropTarget
он компилируется нормально, однако мне нужно использовать интерфейс COM IDropTarget, который я реализовал.Я считаю, что проблема может заключаться в том, что компонент Virtualtrees имеет другую реализацию интерфейса IDropTarget, и они конфликтуют.
Любые идеи, как я могу указать, что я не хотеть Virtualtrees::IID_IDropTarget
?Или пространство имен, которое я использую для IID_IDropTarget COM?
Решение
COM IID_DropTarget
объявляется так:
EXTERN_C const IID IID_IDropTarget;
Поскольку это extern "C"
, он находится в корневом пространстве имен:
::IID_IDropTarget
Другие советы
Добавьте к имени «::» — укажите его как ::IID_IDropTarget
- это фактически сообщит C++, что вам нужен файл из глобального пространства имен.