Помогите решить вот это:
создал абстрактный класс
//FileDriver.h
#pragma once
class CFileDriver
{
HANDLE m_hFile;
public:
virtual int DesiredAccess() = 0;
bool OpenFile(const wchar_t *);
void CloseFile();
CFileDriver(void);
public:
virtual ~CFileDriver(void);
};
// FileDriver.cpp
#include "StdAfx.h"
#include "FileDriver.h"
CFileDriver::CFileDriver(void)
{
}
bool CFileDriver::OpenFile(const wchar_t * _file){
m_hFile = CreateFile(_file, DesiredAccess(), 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
return true;
}
void CFileDriver::CloseFile(){
CloseHandle(m_hFile);
}
CFileDriver::~CFileDriver(void) {}
создал сына:
// JReader.h
#pragma once
#include "FileDriver.h"
class CJKernel;
class СJReader:
public CFileDriver
{
CJKernel * pJKernel;
public:
int DesiredAcces();
СJReader(CJKernel *);
public:
~СJReader(void);
};
// JReader.cpp
#include "StdAfx.h"
#include "JReader.h"
#include "JKernel.h"
СJReader::СJReader(CJKernel * _pJKernel)
{
pJKernel = _pJKernel;
}
int СJReader::DesiredAcces(){
return GENERIC_READ;
}
СJReader::~СJReader(void){}
Как видно, единственный чистый виртуальный метод базового класса здесь реализован, но если сделать
CJKernel kernel;
CJReader pReader = new CJReader(&kernel);
получаем ошибку компиляции:
1>... error C2259: 'СJReader' : cannot instantiate abstract class
1> due to following members:
1> 'int CFileDriver::DesiredAccess(void)' : is abstract
1> ...\filedriver.h(8) : see declaration of 'CFileDriver::DesiredAccess'