Ik heb dit headerbestand en ik probeer variabelen van het type Item
te maken. Ik heb #include "Item.h"
toegevoegd en toch krijg ik nog steeds een unknown type name Item
-fout op beide privévariabelen wanneer ik compileer.
#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 */
Wat is hier aan de hand?
Hier is het Item.h
dat ik toevoeg
#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 */
Antwoord 1, autoriteit 100%
Als u Item.h
opneemt uit uw cpp
-bestand, wordt Player.h
daaruit opgenomen. Vervolgens voegt Player.h
Item.h
weer toe, maar dankzij de include guard doet dit vrijwel niets.
Vervolgens is er in de meegeleverde Player.h
nog geen Item
gedeclareerd. Daarom zal de compiler de fout uitzenden.
Aangezien niets van Player.h
wordt gebruikt in Item.h
, verwijder #include "Player.h"
uit Item.h
.
Antwoord 2, autoriteit 33%
Je neemt "Player.h"
op in "Item.h"
en maakt het circulaire afhankelijkheid. Aangezien het helemaal niet nodig is, verwijdert u het gewoon.