请查看以下代码
Main.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;
};
Spell.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 ++的新手..
答案 0 :(得分:3)
Magic
没有实现它的构造函数和析构函数(也应该是virtual
)。
如果没有必要,甚至不要声明构造函数,例如
class Magic {
public:
virtual ~Magic() {}
virtual void display() = 0;
};
无关:我不知道你可以展示魔法。
答案 1 :(得分:2)
您没有实施
Magic();
~Magic();
您需要在实现文件中内联实现它们,或者将它们标记为= default
。
答案 2 :(得分:2)
您已在Magic
类中声明了析构函数,但未对其进行定义。这就是链接器抱怨的原因(编译器没有)。
答案 3 :(得分:1)
你没有Magic的实现。如果您打算将Magic作为抽象基类,那么只需将其声明更改为:
#pragma once
class Magic
{
public:
virtual void display()=0;
};
请记住,接口中未遵循= 0的任何方法都必须在类中实现。