错误LNK2001:未解析的外部符号-当创建抽象类c++

error LNK2001: unresolved external symbol - when creating abstract class c++

本文关键字:符号 创建 c++ 抽象类 外部 LNK2001 错误      更新时间:2023-10-16

UrzadzenieElektroniczne是我的抽象类,computer继承自它。我还是会出错。我试图修复它们,但我在互联网上找到的解决方案都不起作用。我的虚函数的定义和声明是否有问题,或者我应该在其他地方寻找错误?:错误:

     1>CKomputer.obj : error LNK2001: unresolved external symbol "public: virtual void__thiscall Komputer::wlaczenieurz(void)" (?wlaczenieurz@Komputer@@UAEXXZ)
<标题> UrzadzenieElektroniczne.h h1> CKomputer.h h1> CKomputer.cpp h1> div class="answers">

这是一个打字错误。:)

void UrzadzenieElektroniczne::wlaczenieurz()
应:

void Komputer::wlaczenieurz()

您的函数可能应该符合Komputer的成员资格:

void Komputer::wlaczenieurz()
//   ^^^^^^^^
{
if (czy_wlaczony == 0)
    cout<<"Komputer wylaczony"<<endl;
if (czy_wlaczony == 1)
    cout<<"Komputer wlaczony"<<endl;
}

您需要定义void UrzadzenieElektroniczne::wlaczenieurz()而不是void Komputer::wlaczenieurz()。棘手的部分是c++实际上允许定义纯虚函数。通过它们只能被非虚拟呼叫访问。
您的代码在基类中声明了2 wlaczenieurz(),它是纯虚的,因此不需要定义,派生类中必须有定义。虽然在你的情况下,这显然是打印错误,一般情况下,你可能有一些默认的纯虚函数的实现,可以在派生类中通过添加using语句来使用。
例如,在您的情况下,Komputer中的using UrzadzenieElektroniczne::wlaczenieurz;而不是wlaczenieurz声明也应该修复错误。