编译器错误lnk2019和c4930使用继承

时间:2012-12-02 18:38:31

标签: c++ visual-studio-2010

当我使用继承时,我遇到了编译代码的问题。我已经尝试了大部分内容,但没有运气编译

我首先有一个抽象或'界面'类

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:未解析的外部符号“public:__thiscall ImyBase :: ImyBase(void)”(?? 0ImyBase @@ QAE @ XZ)在函数“public:__thiscall”中引用myBase :: myBase(void)“(?? 0myBase @@ QAE @ XZ)

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

任何帮助表示赞赏!我知道它必须在某个地方犯一个笨蛋...

1 个答案:

答案 0 :(得分:2)

您没有基础构造函数的实现。选项是在实现文件中定义构造函数,或者如果它们是空的,则在类定义本身中定义:

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

或将它们标记为default C ++ 11:

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