我的C ++中的简单数据库程序存在问题(具有继承和虚拟功能。) 我做过类hirarchy,代表对象Weapon:
#ifndef Ammu_h
#define Ammu_h
#include <string>
#include <iostream>
using namespace std;
//////////HEADER FILE//////////////
class Weapon{
protected:
string name;
char damage;
public:
virtual void show() = 0;
//virtual ~Weapon();
};
class WhiteArm: public Weapon{
protected:
double sharpness;
double defence;
};
class Axe: public WhiteArm{
public:
Axe(string str, char dmg, double shrp, double def){
name = str;
damage = dmg;
sharpness = shrp;
defence = def;
};
void show(){
cout << this->name << this->damage << this->sharpness << this->defence << endl;
};
//class Sword: public WhiteArm{...};
//class Club: public WhiteArm{...};
};
#endif
首先,我不太确定我的实施是否合适。
我的主要问题是,当我添加虚拟析构函数时,我收到错误:LNK2001: unresolved external symbol "public: __thiscall Weapon::~Weapon(void)"
我认为有必要在基类包含虚方法时使析构函数成为虚拟。
在层次结构的末尾构建构造函数是否合适? (像我一样,上层)
我将感谢对我的代码的每一个建议 提前致谢
答案 0 :(得分:3)
你的虚拟析构函数仍然需要有一个实现,即使你的意思是它是纯虚拟的。我通常使用这种奇怪的语法来编写它们:virtual ~Weapon() = 0 {}
。
但是,显然这对某些编译器(微软以外的所有编译器都不起作用)都不起作用,这是正确的(C ++ 11draft§10.4/ 2):
[注意:函数声明不能同时提供纯指定符 和定义 - 结束注释] [例如:
struct C
{
virtual void f() = 0 { }; // ill-formed
};
相反,您可以省略= 0
或在课程定义之外找到正文。