2013-06-20 3 views
0

У меня есть 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 *.

У меня есть небольшая ошибка, но я не могу понять это. Мне хотелось бы получить помощь. благодаря!

+0

'AbstractFacetory' - это' IOSFacetory'. Обратное неверно. Вы пытаетесь присвоить указатель базового класса производному классу. – juanchopanza

+0

Примечание: вы просачиваетесь, вы просачиваетесь, вы просачиваетесь ... попробуйте и исследуйте 'std :: unique_ptr', он должен поддерживаться VC++. –

ответ

0

Вы должны изменить свои отношения наследования. AbstractFactory должен быть базовым классом как IOSFactory, так и WinFactory.

Не забудьте объявить виртуальный деструктор в базовом классе.

+0

Хорошо, теперь это так, но я до сих пор получаю эту ошибку. – Billie

+0

Вот она .. спасибо! – Billie

0

Вы должны получить WinFacetory и IOSFacetory от AbstractFactory. Теперь вы делаете это наоборот.

Смежные вопросы