2013-06-20 48 views
0

我有一個AbstractFactory,WinFactoryIOSFactory類。未能將派生類分配給基類指針?

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指針:

#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

您應該從AbstractFactory派生出WinFacetoryIOSFacetory。現在你反其道而行之。

相關問題