我是C ++的新手,作为一种“学习经验”,我正在移植一个用C#制作的旧游戏机“游戏”。
目前,我在Ubuntu 14.10下使用g ++ 4.9.1。
我有一个头文件,用于定义某些类型,例如Item
,HealingItem
(继承Item),以及继承Item的Weapon
。
我稍后在另一个头文件中引用了这些类型,我在其中添加了正确的#include
,在这种情况下是一个Entity
类,它定义了Player
,其Items::Weapon _equippedWeapon
有趣的是,编译器似乎没有将Items::Weapon
识别为一种类型,理论上这不应该是一个问题,考虑Weapon
继承Item
(Items::Item
编译如果我将特定行更改为该行,则会很好,但Items::HealingItem
不会)
我在这里错过了什么吗?如果需要,我可以发布完整的源代码。
以下是在我的项目中运行make
的完整消息:
error: 'Weapon' in namespace 'Items' does not name a type
Items::Weapon _equippedWeapon;
^
仅供快速参考,我的命名空间设置如下
namespace Items
{
class Item;
class HealingItem;
class Weapon;
}
//some code cut out for obvious reasons, i'll just show the basic class constructors for the classes
class Items::Item
{
public:
Item();
//...
};
class Items::HealingItem: public Items::Item
{
//...
public:
HealingItem();
};
class Items::Weapon: public Items::Item
{
public:
Weapon();
//...other properties and get/setters
};
其他信息:
我的继承类未被识别为类型。
例如,当我声明变量Items::Item
时,程序编译正常。但是,正当我将其更改为Items::Weapon
,这是从Items::Item
派生的,当编译器错误进入时。问题是,如何让编译器开始将Items::Weapon
识别为它自己的类型?