У меня есть класс, производный (public
) от IUnknown, определение которого (из файла include/unknwnbase.h
в MinGW 4.9.2) счетный ниже:Отсутствует виртуальный деструктор в базовом классе интерфейса?
extern "C++" {
MIDL_INTERFACE("00000000-0000-0000-C000-000000000046")
IUnknown {
public:
BEGIN_INTERFACE
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject) = 0;
virtual ULONG STDMETHODCALLTYPE AddRef(void) = 0;
virtual ULONG STDMETHODCALLTYPE Release(void) = 0;
template<class Q>
HRESULT STDMETHODCALLTYPE QueryInterface(Q **pp) {
return QueryInterface(__uuidof(Q), (void **)pp);
}
END_INTERFACE
};
}
Когда я компилирую производный класс, я получаю следующее предупреждение (которое в OpenCV проект рассматривается как ошибки):
базового класс структура IUnknown 'имеет доступный невиртуальный деструктор [-Werror = невиртуальный-dtor]
Я изо всех сил пытаюсь понять, является ли это ошибкой MinGW (отсутствующий виртуальный деструктор) или что-то еще, что можно обойти в том, как был получен IUnknown. Проект OpenCV построен в нескольких других местах, где это предупреждение не выскакивают ...
Не знаете, что делают эти макросы, но попробуйте добавить пустой виртуальный деструктор? –
Я думаю, он [был исправлен по-последнему] (https://github.com/Itseez/opencv/pull/3599), вы должны попробовать свежее git pull – berak
@berak Я отправил ошибку :), я в курсе репозиторий и исправление, к сожалению, не помогают – Antonio