错误:表达式必须具有类类型

ERROR : Expression must have class type?

本文关键字:类型 表达式 错误      更新时间:2023-10-16

我正在为管理酒店的类编写一个程序。Report1功能应该列出所有已占用的房间以及每个房间中的客户。我已经编写了代码,但在嵌套的FOR循环的条件语句中出现了错误。编译器在循环中下划线iRoom。。。。。。。。。。。。for(int j=0;j<iRoom.customerIDinRoom……这是说iRoom表达式必须有一个类类型,但当我在第一个for循环(类型为Room)中声明它时,我给了它一个类的类型。有什么建议吗?

string Hotel::Report1()
{
string result;
for(int i=0;i<listofrooms.size();i++)
{
    Room iRoom = listofrooms.get(i);
    result+= padLeft(intToString(iRoom.roomID),' ',8)+" "+
        padRight(iRoom.name,' ',20) + " "+
        padLeft(intToString(iRoom.floor),' ',8) + " " +
        padLeft(intToString(iRoom.number),' ',8) + " " +
        padLeft(intToString(iRoom.basePriceInSeason),' ',8) + " " +
        padLeft(intToDollarString(iRoom.basePriceOutOfSeason),' ',8) + "n";
    for(int j = 0; j < iRoom.customerIDinRoom.size(); j++)
    {
        int cusID= iRoom.customerIDinRoom[j];
        Customer & cus = listofcustomers.getByID(cusID);
        result+= padLeft(intToString(cus.customerID),' ',18)+" "+
            padRight(cus.name,' ',20) + " "+
            padRight(cus.phoneNumber,' ',10) + " " +
            padRight(cus.ccNumber,' ',20) + "n";
    }
}
return result;
}

这是房间等级申报

#include <iostream>
#include <string>
using namespace std;
class Hotel;
class ListOfRooms;
class Room
{
friend class ListOfRooms;
friend class Hotel;
public:
Room(string n,int flo,int num,int bpin, int bpos);
Room();
void addCusID(int cusID){customerIDinRoom = cusID;}
void removeCustomerID(int cusID) { customerIDinRoom = 0;}
private:
string name; //BUILDING
int floor;
int number;
int basePriceInSeason;
int basePriceOutOfSeason;
int roomID;
int customerIDinRoom; //not pushback, will be assignment
};

错误是customerIDInRoomint,但您正在对其调用size方法。如果您试图从0循环到customerIDInRoom-1,则可以简单地删除size()调用。如果您需要保留一系列customerIDInRoom int(正如代码中"无推回"注释所建议的那样),那么您很可能需要一个标准库容器。使用哪一个取决于您的要求。所有这些都有一个size()方法。

问题是,int(即您声明customerIDinRoom的方式)没有size()方法,但您无论如何都在调用它。将它声明为理智的东西,例如std::vector<int>,它应该可以工作。

还有:

Room iRoom = listofrooms.get(i);

这是将房间从listofrooms复制到iRoom。这比必要的工作量还多;你应该使用一个参考:

const Room& iRoom(listofrooms.get(i));
相关文章: