类不是类型

Olo*_*lof 1 c++

我收到一个错误'RentedMediaItem不是一个类型.Hoverever它说当我使用类作为参数而不是当我使用它作为对象时.

inventory.h我收到错误.

#ifndef INVENTORY_H
#define INVENTORY_H

#include <QString>
#include "rentedmediaitem.h"
#include "historypurchase.h"
#include "supportticket.h"

class RentedMediaItem;

class Inventory
{
private:
    RentedMediaItem * RentedMediaItem; // No error
    MediaItem** mediaItems;
    HistoryPurchase* historyPurchase;
    SupportTicket* tickets;
public:
    Inventory();//Not implemented
    void supportTicket(QString Text); //Not implemented
    QString* getAllSupportTickets(); //Not implemented
    QString supportTicket(int index); //Not implemented
    void mediaItem(int index); //Not implemented
    QString* getAllRentedMediaItems(); //Not implemented
    HistoryPurchase* getPurchaseHistory(); //Not implemented
    void useMedia(int index); //Not implemented
    void addMediaItem(RentedMediaItem* rentedMediaItem); //ERROR
};

#endif // INVENTORY_H
Run Code Online (Sandbox Code Playgroud)

rentedmediaitem.h我在其中声明了RentedMediaItem类.

#ifndef RENTEDMEDIAITEM_H
#define RENTEDMEDIAITEM_H

#include "mediaitem.h"
#include <time.h>

class RentedMediaItem
{
private:
    unsigned int endDate;
    MediaItem* media;

public:
    RentedMediaItem();
    MediaItem* getMedia();
    int getEndDate();
    void initialize(unsigned int time);
    void use();
};

#endif // RENTEDMEDIAITEM_H
Run Code Online (Sandbox Code Playgroud)

Fil*_*efp 6

您偶然发现了典型的名称隐藏案例.


由于您声明Inventory::RentedMediaItem与类型本身具有相同的名称,因此在该声明之后的查找将找到成员变量,而不是类型本身.

有几种方法可以解决这个问题,但最简单的方法是将你的成员变量命名为其他东西(不与类型名称冲突).


struct Obj {
  /* .. */
};
Run Code Online (Sandbox Code Playgroud)
int main () {
  Obj Obj;      // declare a variable named `Obj` of type `Obj`
  Obj x;        // ill-formed, `Obj` is the previously declared variable
  struct Obj y; // ok, using an elaborate-type-specifier
}
Run Code Online (Sandbox Code Playgroud)