我有这个头文件,我正在尝试创建Item
类型的变量。我已经包含了#include "Item.h"
,但在编译时我仍然在两个私有变量上都出现unknown type name Item
错误。
#ifndef PLAYER_H
#define PLAYER_H
#include <vector>
#include "Item.h"
using std::vector;
class Player
{
public:
// constructor
Player( void );
// destructor
virtual ~Player( void );
private:
Item item;
std::vector <Item> inventory;
};
#endif /* PLAYER_H */
这是怎么回事?
继承我所包含的Item.h
#ifndef ITEM_H
#define ITEM_H
#include <string>
#include "Player.h"
#include "GlobalDefs.h"
class Item {
public:
Item();
Item(gold_t v, std::string n);
virtual ~Item();
// Getter
inline virtual gold_t GetValue (void)
{
return value;
}
// Getter
inline virtual std::string GetName (void);
// Getter
virtual std::string GetItemText(void);
protected:
gold_t value;
std::string name;
};
#endif /* ITEM_H */
答案 0 :(得分:2)
如果您的Item.h
文件中包含cpp
,则会其中包含Player.h
。然后,Player.h
再次包含Item.h
,但多亏了包含后卫,这几乎没有任何作用。
然后,在包含的Player.h
中,尚未声明Item
。因此,编译器将发出错误。
由于Player.h
中未使用Item.h
内的任何内容,请从#include "Player.h"
删除Item.h
。
答案 1 :(得分:1)
您在"Player.h"
中加入"Item.h"
并将其设为circular dependency。因为它根本没有必要,所以只需删除它。