C当包含类标题时,为什么会出现“未知类型”?

参见英文答案 >
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”.

点赞