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

时间:2012-03-26 05:01:06

标签: c++ loops

我正在为管理酒店的课程编写程序。此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;
}

这是Room类声明

#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
};

2 个答案:

答案 0 :(得分:4)

错误是customerIDInRoomint,但您正在调用size方法。如果您尝试从0循环到customerIDInRoom-1,那么您只需删除size()来电即可。如果您需要保留一系列customerIDInRoom整数(如代码中的“无后推”评论所示),那么您很可能需要standard library container。使用哪一个取决于您的要求。所有这些都有size()方法。

答案 1 :(得分:2)

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

此外:

Room iRoom = listofrooms.get(i);

这是将会议室从listofrooms复制到iRoom。这不仅仅是必要的工作;你应该使用引用:

const Room& iRoom(listofrooms.get(i));