Wednesday, December 1, 2010

Проблема использования метода с именем DeleteFile в абстрактном классе

Сегодня столкнулся со странной ситуацией.
Есть класс, описывающий интерфейс, скажем IMyInterface, и класс, его реализующий, пусть будет CMyInterfaceImplementation:
#include 

class IMyInterface
{
    virtual unsigned long DeleteFile(const std::wstring&) = 0;
};

class CMyInterfaceImplementation : public IMyInterface
{
    unsigned long DeleteFile(const std::wstring&);
};

При попытке скомпилировать проект под Visual Studio 2005 появляется ошибка:
error C2259: 'CMyInterfaceImplementation' : cannot instantiate abstract class due to following members:
'unsigned long DeleteFile(const std::wstring&)' is abstract

По какой-то причине компилятор воспринимает метод DeleteFile как WinAPI функцию DeleteFile. Если переименовать метод DeleteFile, то все работает нормально.

Для исправления ошибки достаточно включить заголовочный файл windows.h в файл, где создается экземпляр класса CMyInterfaceImplementation.

No comments: