У меня есть AbstractFactory
, WinFactory
и IOSFactory
классы.Не удается выделить производный класс указателю базового класса?
AbstactFactory inheritences WinFactory и IOSFactory как следующее:
class IOSFacetory {
private:
IOSRectButton *_rectbtn;
IOSCircularButton *_circbtn;
public:
IOSFacetory() : _rectbtn(NULL), _circbtn(NULL) {} // set rectbtn to null
IOSRectButton* getIOSRectBtn() {
if(!_rectbtn) _rectbtn = new IOSRectButton;
return _rectbtn;
}
IOSCircularButton* getIOSCircBtn() {
if(!_circbtn) _circbtn = new IOSCircularButton;
return _circbtn;
}
~IOSFacetory() {
if(_rectbtn) delete _rectbtn;
if(_circbtn) delete _circbtn;
}
};
class WinFacetory {
private:
WinRectButton *_rectbtn;
WinCircularButton *_circbtn;
public:
WinFacetory() : _rectbtn(NULL), _circbtn(NULL) {} // set rectbtn to null
WinRectButton* getWinRectBtn() {
if(!_rectbtn) _rectbtn = new WinRectButton;
return _rectbtn;
}
WinCircularButton* getWinCircBtn() {
if(!_circbtn) _circbtn = new WinCircularButton;
return _circbtn;
}
~WinFacetory() {
if(_rectbtn) delete _rectbtn;
if(_circbtn) delete _circbtn;
}
};
class AbstractFactory : public WinFacetory, public IOSFacetory {
public:
AbstractFactory(){}
};
в функции main
, я пытаюсь установить IOSFactory
в AbstractFactory
Pointer:
#include "AbstractFactory.h"
int main() {
#ifdef _WIN
AbstractFactory* factory = new WinFacetory;
#else
AbstractFactory* factory = new IOSFacetory;
#endif
std::cin.get();
return 0;
}
Это не работает и я получаю следующую ошибку компиляции:
IntelliSense: a value of type "IOSFacetory *" cannot be used to initialize an entity of type "AbstractFactory *
.
У меня есть небольшая ошибка, но я не могу понять это. Мне хотелось бы получить помощь. благодаря!
'AbstractFacetory' - это' IOSFacetory'. Обратное неверно. Вы пытаетесь присвоить указатель базового класса производному классу. – juanchopanza
Примечание: вы просачиваетесь, вы просачиваетесь, вы просачиваетесь ... попробуйте и исследуйте 'std :: unique_ptr', он должен поддерживаться VC++. –