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

CKomputer.h

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

CKomputer.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つを宣言します。これは純粋な仮想であるため、定義する必要はなく、定義が必要な派生クラスで1つです
あなたの場合は明らかに誤植ですが、一般に、usingステートメントを追加することで派生クラスで使用できる純粋仮想関数のデフォルトの実装がある場合があります。
たとえば、あなたの場合using UrzadzenieElektroniczne::wlaczenieurz;、宣言Komputerの代わりにwlaczenieurzエラーも修正する必要があります。

于 2013-04-25T21:49:04.310 に答える