0

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

     1>CKomputer.obj : error LNK2001: unresolved external symbol "public: virtual void__thiscall Komputer::wlaczenieurz(void)" (?wlaczenieurz@Komputer@@UAEXXZ)

UrzadzenieElektroniczne.h

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

CK计算机

#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();

CK计算机.cpp

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

3 回答 3

3

这是一个错字。:)

void UrzadzenieElektroniczne::wlaczenieurz()

应该:

void Komputer::wlaczenieurz()
于 2013-04-25T21:46:23.030 回答
2

您的函数可能应该被限定为以下成员Komputer

void Komputer::wlaczenieurz()
//   ^^^^^^^^
{
if (czy_wlaczony == 0)
    cout<<"Komputer wylaczony"<<endl;
if (czy_wlaczony == 1)
    cout<<"Komputer wlaczony"<<endl;
}
于 2013-04-25T21:46:13.453 回答
1

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

于 2013-04-25T21:49:04.310 回答