类不是类型

Class is not a type

本文关键字:类型      更新时间:2023-10-16

我得到一个错误'RentedMediaItem不是一个类型。不管怎样,当我使用class作为参数而不是当我使用is作为对象时,它说的是

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

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

您偶然发现了一个典型的名称隐藏


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

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

例子
struct Obj {
  /* .. */
};
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
}