0

継承を使用しているときにコードのコンパイルで問題が発生します。私はほとんどすべてを試しましたが、コンパイルする運はありません

私は最初に抽象クラスまたは「インターフェース」クラスを持っています

class ImyBase
{
    public:
        ImyBase();
        ImyBase(....);
        virtual ~ImyBase();

        virtual void someFuncs() = 0;
        ....
};

次に、このクラスを実装するクラスがあります。

class myBase : public ImyBase
{
    public:
        myBase();
        myBase(....);
        virtual ~myBase();

        void someFuncs();
        ....
};

次に、ラッパークラスがあります。

class myWrap
{
    public:
        myWrap();
        myWrap(....);
        virtual ~myWrap();

        void someFuncs();
        ....
};

この時点で、実装ではすべてがうまく機能します。しかし、ラッパークラスをテストしようとすると、エラーLNK2019:unresolved external symbol "public:__thiscall ImyBase :: ImyBase(void)"(?? 0ImyBase @@ QAE @ XZ)referenced in function "public:__thiscall myBase :: myBase(void) "(?? 0myBase @@ QAE @ XZ)

int main(int argc, char* argv)
{
    myWrap wr;
}

どんな助けでも大歓迎です!私はそれがどこかでばかげた間違いであることを知っています...

4

1 に答える 1

2

基本コンストラクターの実装はありません。オプションは、実装ファイルでコンストラクターを定義するか、コンストラクターが空の場合はクラス定義自体で定義します。

class ImyBase
{
    public:
        ImyBase() {};
        ImyBase(....) {};
        virtual ~ImyBase() {};
};

defaultまたは、C++11のようにマークします。

class ImyBase
{
    public:
        ImyBase() = default;
        ImyBase(....) = default;
        virtual ~ImyBase() = default;
};
于 2012-12-02T18:51:02.030 に答える