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

Compiler error lnk2019 and c4930 using inheritance

本文关键字:lnk2019 c4930 错误 编译器 继承      更新时间:2023-10-16

我在使用继承时编译代码时遇到问题。我已经尝试了所有的东西,但编译没有成功

我首先有一个抽象或"接口"类

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;
}

感谢您的帮助!我知道这一定是一个愚蠢的错误。。。

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

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

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

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