1. ホーム
  2. c++

[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複

2022-01-17 16:47:49

質問

このヘッダーファイルで、以下の型の変数を作成しようとしています。 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 */

解決方法は?

もし Item.h を使用し cpp ファイルを作成します。 Player.h はそこからインクルードされます。では Player.h には Item.h が、インクルードガードのおかげで、これは事実上何もしていない。

次に、インクルードされた Player.h はありません。 Item がまだ宣言されていません。そのため、コンパイラはエラーを出します。

には何もないので Player.h で使用されている Item.h を削除します。 #include "Player.h" から Item.h .