2013-06-20 4 views
0

나는 AbstractFactory, WinFactoryIOSFactory 클래스를 가지고 있습니다. 다음과 같이파생 클래스를 기본 클래스 포인터에 할당하지 못합니까?

AbstactFactory inheritences WinFactory 및 IOSFactory :

#include "AbstractFactory.h" 

int main() { 
#ifdef _WIN 
    AbstractFactory* factory = new WinFacetory; 
#else 
    AbstractFactory* factory = new IOSFacetory; 
#endif 
    std::cin.get(); 
    return 0; 
} 

것은 그것은 작동하지 않습니다 다음 main 기능에

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(){} 
}; 

, 나는 AbstractFactory 포인터로 IOSFactory을 설정하기 위해 노력하고있어 다음과 같은 컴파일 오류가 발생합니다.

IntelliSense: a value of type "IOSFacetory *" cannot be used to initialize an entity of type "AbstractFactory *.

나는 사소한 오류가 있다고 생각하지만 나는 그것을 이해할 수 없다. 나는 도움을 받고 싶다. 감사!

+0

'AbstractFacetory'는 'IOSFacetory'입니다. 그 반대는 사실이 아닙니다. 파생 클래스 1에 기본 클래스 포인터를 할당하려고합니다. – juanchopanza

+0

참고 : 유출, 유출, 유출 ... 'std :: unique_ptr'을 조사하고 VC++에서 지원해야합니다. –

답변

0

상속 관계를 취소해야합니다. AbstractFactory는 IOSFactory와 WinFactory의 기본 클래스 여야합니다.

기본 클래스에 가상 소멸자를 선언해야합니다.

+0

좋아, 지금은 그렇지만 여전히이 오류가 발생합니다 .. – Billie

+0

여기 있습니다 .. 고마워요! – Billie

0

WinFacetoryIOSFacetoryAbstractFactory에서 파생되어야합니다. 이제 당신은 반대로 행동합니다.

관련 문제