参见英文答案 >
Resolve build errors due to circular dependency amongst classes 9个
我有这个头文件,我正在尝试创建Item类型的变量.我已经包含了#include“Item.h”但是当我编译时,我仍然在两个私有变量上得到一个未知的类型名称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 */
最佳答案 如果从cpp文件中包含Item.h,则包含Player.h.然后,Player.h再次包含Item.h,但是由于包含了后卫,这几乎没有任何作用.
然后,在包含的Player.h中,尚未声明任何Item.因此,编译器将发出错误.
由于在Item.h中没有使用Player.h,所以从Item.h中删除#include“Player.h”.