UrzadzenieElektroniczne是我的抽象类和类Komputer继承自它。我仍然得到错误。我试图修复它们,但我在互联网上找到的解决方案都没有。我的虚函数的定义和声明是否有问题,或者我应该在其他地方查找错误?: 错误:
1>CKomputer.obj : error LNK2001: unresolved external symbol "public: virtual void__thiscall Komputer::wlaczenieurz(void)" (?wlaczenieurz@Komputer@@UAEXXZ)
#pragma once
#include <stdlib.h>
#include <iostream>
#include <string>
using namespace std;
class UrzadzenieElektroniczne
{
public:
int czy_wlaczony;
UrzadzenieElektroniczne();
~UrzadzenieElektroniczne();
virtual void wlaczenieurz() = 0;
private:
protected:
string producent;
};
#pragma once
#include <stdlib.h>
#include <iostream>
#include <string>
#include "UrzadzenieElektroniczne.h"
#include "Procesor.h"
#include "KartaDzwiekowa.h"
using namespace std;
class Komputer: public UrzadzenieElektroniczne
{
private:
Procesor procesor;
KartaDzwiekowa *karta_dzwiekowa;
string nazwa_komputera;
int ram;
int ile_kart_dzwiekowych;
public:
void wlaczenieurz();
#include <iostream>
#include <cstdio>
#include <string>
#include "CKomputer.h"
#include "Procesor.h"
#include "KartaDzwiekowa.h"
void UrzadzenieElektroniczne::wlaczenieurz()
{
if (czy_wlaczony == 0)
cout<<"Komputer wylaczony"<<endl;
if (czy_wlaczony == 1)
cout<<"Komputer wlaczony"<<endl;
}
答案 0 :(得分:3)
这是一个错字。 :)
void UrzadzenieElektroniczne::wlaczenieurz()
应该是:
void Komputer::wlaczenieurz()
答案 1 :(得分:2)
您的功能应该被认定为Komputer
的成员:
void Komputer::wlaczenieurz()
// ^^^^^^^^
{
if (czy_wlaczony == 0)
cout<<"Komputer wylaczony"<<endl;
if (czy_wlaczony == 1)
cout<<"Komputer wlaczony"<<endl;
}
答案 2 :(得分:1)
您需要定义void UrzadzenieElektroniczne::wlaczenieurz()
而不是void Komputer::wlaczenieurz()
。棘手的部分是C ++实际上允许定义纯粹的virtal函数。通过非虚拟呼叫可以访问它们
您的代码在基类中声明了2 wlaczenieurz()
,并且它是纯虚拟的,因此不需要定义,并且必须具有定义的派生类中的一个。
虽然在您的情况下它显然是错误打印,但通常您可能有一些纯虚函数的默认实现,可以通过添加using
语句在派生类中使用。
例如,在您的情况下,using UrzadzenieElektroniczne::wlaczenieurz;
中的Komputer
代替wlaczenieurz
声明也应该修复错误。