C++ Waarom is er een ‘onbekend type’ als de klassekop is inbegrepen?

Ik heb dit headerbestand en ik probeer variabelen van het type Itemte 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.hdat 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.hopneemt uit uw cpp-bestand, wordt Player.hdaaruit opgenomen. Vervolgens voegt Player.hItem.hweer toe, maar dankzij de include guard doet dit vrijwel niets.

Vervolgens is er in de meegeleverde Player.hnog geen Itemgedeclareerd. Daarom zal de compiler de fout uitzenden.

Aangezien niets van Player.hwordt 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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

9 − one =

Other episodes