0

次のコードを見てください

メイン.cpp

#include <iostream>
#include <string>

using namespace std;

int main()
{
    system("pause");

    return 0;
}

Magic.h

#pragma once

class Magic
{
public:
    Magic();
    ~Magic();
    virtual void display()=0;
};

Spell.h

#pragma once
#include "Magic.h"
#include <iostream>
#include <string>

using namespace std;

class Spell :
    public Magic
{
public:
    Spell(void);
    Spell(string words);
    ~Spell(void);
    void display();

private:
    string words;
};

スペル.cpp

#include "Spell.h"
#include "Magic.h"
#include <iostream>
#include <string>

using namespace std;



Spell::Spell(void)
{
}

Spell::Spell(string words)
{
    this->words = words;
}


Spell::~Spell(void)
{
    cout << "Delete Spell" << endl;
}

void Spell::display()
{
    cout << "Spell Words: " << words << endl;
}

ここで、エラーが発生しています

1>------ Build started: Project: Revision1_1, Configuration: Debug Win32 ------
1>Spell.obj : error LNK2019: unresolved external symbol "public: __thiscall Magic::~Magic(void)" (??1Magic@@QAE@XZ) referenced in function __unwindfunclet$??0Spell@@QAE@XZ$0
1>Spell.obj : error LNK2019: unresolved external symbol "public: __thiscall Magic::Magic(void)" (??0Magic@@QAE@XZ) referenced in function "public: __thiscall Spell::Spell(void)" (??0Spell@@QAE@XZ)
1>C:\Users\yohan\Documents\Visual Studio 2010\Projects\Revision1_1\Debug\Revision1_1.exe : fatal error LNK1120: 2 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

ここで何をすべきかわかりません。なぜこうなった?助けてください!とにかく私はC ++が初めてです..

4

4 に答える 4

3

Magicコンストラクタとデストラクタを実装していません (これも実装する必要がありますvirtual)。

必要でない場合は、コンストラクターを宣言しないでください。

class Magic {
public:
  virtual ~Magic() {}
  virtual void display() = 0;
};

無関係:あなたが魔法を表示できるとは知りませんでした。

于 2012-12-22T15:46:12.257 に答える
2

あなたは実装しませんでした

Magic();
~Magic();

実装ファイルにインラインで実装するか、それらをマークする必要があります= default

于 2012-12-22T15:45:55.037 に答える
1

Magic の実装がありません。Magic を抽​​象基底クラスにしたい場合は、その宣言を次のように変更します。

#pragma once

class Magic
{
public:
    virtual void display()=0;
};

インターフェイスで = 0 が続かないメソッドはすべて、クラスに実装する必要があることに注意してください。

于 2012-12-22T15:46:52.060 に答える