ОШИБКА: выражение должно иметь тип класса? - PullRequest
1 голос
/ 26 марта 2012

Я пишу программу для класса, которая управляет отелем. Предполагается, что эта функция Report1 перечисляет все занятые комнаты и кто находится в каждой комнате. У меня написан код, но я получаю ошибку в условии условия моего вложенного цикла FOR. Компилятор подчеркивает iRoom в цикле ............ для (int j = 0; j <<strong> iRoom .customerIDinRoom ..... it говорит, что выражение 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
};

Ответы [ 2 ]

4 голосов
/ 26 марта 2012

Ошибка в том, что customerIDInRoom является int, но вы вызываете метод size для него. Если вы пытаетесь выполнить цикл от 0 до customerIDInRoom-1, вы можете просто удалить вызов size(). Если вам нужно сохранить диапазон целых чисел customerIDInRoom (как это предусмотрено вашим комментарием «без pushback» в коде), то вам, скорее всего, понадобится стандартный контейнер библиотеки . Какой из них использовать, зависит от ваших требований. Все они имеют метод size().

2 голосов
/ 26 марта 2012

Проблема в том, что int, как вы объявили customerIDinRoom, не имеет size() метода, но вы все равно его вызываете. Объявите это как что-то вменяемое, такое как std::vector<int>, и оно должно работать.

Также:

Room iRoom = listofrooms.get(i);

Копирует комнату из listofrooms в iRoom. Это больше работы, чем необходимо; Вы должны использовать ссылку вместо:

const Room& iRoom(listofrooms.get(i));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...