我试图通过多个标题和cpp文件使用继承来处理我正在编写的文本游戏。
我有武器的基类。这是在Weapon.h文件中。
class Weapon
{
public:
string Name;
int Damage;
float ChanceToHit;
int ExtraDamage;
int Result;
int Array[3];
int Attack(int, int, string);
};
然后我尝试将基础Weapon.h类继承到Bow and Sword类。我确信我正确地包含了文件,但是当我尝试编译时,我收到错误“错误:期望的类名类Blade:公共武器” Bow类的错误相同。
#include "Weapon.h"
#include "Crossbow.h"
using namespace std;
class Bow : public Weapon
{
public:
string Type = "Ranged";
bool loaded;
protected:
Bow();
};
#include "Weapon.h"
class Blade : public Weapon
{
private:
string Type = "Melee";
protected:
void Draw();
};
有谁知道为什么会这样?谷歌也没有出现任何有用的东西。感谢
MCVE(我认为)
//In Base.h
class Base
{
public:
int function();
private:
};
//In Base.cpp
int Base::function()
{
randomshit
return 0;
}
//In Inherit.h
#include "Base.h"
class Inherit : public Base
{
public:
int function():
private:
};
Getting error: "expected class name class Bow : public Weapon"
编辑:结果我需要包含“#pragma once”,几乎解决了所有问题。谢谢你的帮助。
答案 0 :(得分:0)
您没有使用任何包含警戒,因此您的文件Weapon.h可能会被多次包含,从而导致编译错误。
要了解有关包含警卫的更多信息:https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Include_Guard_Macro
您的标题Weapon.h将成为:
#ifndef WEAPON_H_INCLUDED
#define WEAPON_H_INCLUDED
class Weapon
{
public:
string Name;
int Damage;
float ChanceToHit;
int ExtraDamage;
int Result;
int Array[3];
int Attack(int, int, string);
};
#endif // WEAPON_H_INCLUDED
对所有其他头文件执行相同操作。
完成后,删除所有不必要的包含并执行干净的重建。
答案 1 :(得分:0)
这可能不是答案,但不可能将其作为评论发布
这在我的Visual Studio 2013上编译(但不链接!!)。
#include <string>
using namespace std;
class Weapon
{
public:
string Name;
int Damage;
float ChanceToHit;
int ExtraDamage;
int Result;
int Array[3];
int Attack(int, int, string);
};
class Bow : public Weapon
{
public:
string Type = "Ranged";
bool loaded;
protected:
Bow();
};
class Blade : public Weapon
{
private:
string Type = "Melee";
protected:
void Draw();
};
但由于声明初始化为string Type = "Melee";
,因此旧版编译器可能会失败。
请注意,using namespace std;
在声明class Weapon
之前。