Неоднозначность между IID_IDropTarget и Virtualtrees :: IID_IDropTarget - PullRequest
2 голосов
/ 10 февраля 2010

В настоящее время я прохожу процесс рефакторинга, включающий сокращение времени компиляции, и я столкнулся со следующей ошибкой компиляции:

[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?

Ответы [ 2 ]

1 голос
/ 10 февраля 2010

COM IID_DropTarget объявлено так:

EXTERN_C const IID IID_IDropTarget;

Поскольку он extern "C", он находится в корневом пространстве имен:

::IID_IDropTarget
1 голос
/ 10 февраля 2010

Предварительно добавьте имя с помощью "::" - укажите его как ::IID_IDropTarget - это фактически скажет C ++, что вы хотите получить имя из глобального пространства имен.

...