0

AbstractFactoryWinFactoryおよびIOSFactoryクラスがあります。

AbstactFactory は、次のように 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(){}
}; 

関数では、 a をPointermainに設定しようとしています:IOSFactoryAbstractFactory

#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 *.

私は小さなエラーがあると思いますが、それを理解することはできません。助けてもらいたいです。ありがとう!

4

2 に答える 2

0

WinFacetoryIOSFacetoryから派生する必要がありますAbstractFactory。今、あなたはそれを逆にします。

于 2013-06-20T06:52:16.700 に答える
0

継承関係を逆にする必要があります。AbstractFactory は、IOSFactory と WinFactory の両方の基本クラスである必要があります。

基本クラスで仮想デストラクタを宣言することを忘れないでください。

于 2013-06-20T06:52:19.760 に答える