我收到错误'RentedMediaItem不是一个类型。 Hoverever它说,当我使用类作为参数但不使用时作为对象。
在库存中,我收到了错误。#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
答案 0 :(得分:6)
您偶然发现了名称隐藏的典型案例。
由于您声明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
}