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

时间:2016-05-05 01:13:12

标签: c++

我有这个头文件,我正在尝试创建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 */

2 个答案:

答案 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。因为它根本没有必要,所以只需删除它。