2012-03-26 365 views
0

我正在編寫管理酒店的課程。 Report1函數應該列出所有佔用的房間和每個房間中的哪個客戶。我寫了代碼,但我在嵌套的FOR循環的條件語句中出現錯誤。編譯器在循環中下劃線iRoom ............ for(int j = 0; j < iRoom .customerIDinRoom .....它表示iRoom表達式必須有一個類的類型,但我給它一個類類型,當我宣佈它的第一個for循環(類型之內)。任何suggestioins?錯誤:表達式必須具有類類型?

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 
}; 
+0

你可以把類聲明在這裏嗎? – littleadv 2012-03-26 05:05:05

+0

'iRoom.customerIDinRoom [i] .size();'?不知道類型等不知道 – 2012-03-26 05:06:25

+0

@littleadv我加了它 – Mike 2012-03-26 05:12:10

回答

2

錯誤是customerIDInRoomint,但您要撥打size方法就可以了。如果您嘗試從0循環到customerIDInRoom-1,則可以簡單地刪除size()呼叫。如果您需要保留一系列customerIDInRoom整數(如代碼中的「無回覆」評論所建議的那樣),那麼您很可能需要一個standard library container。使用哪一個取決於您的要求。所有這些都有一個size()方法。

1

問題是int,這是你如何聲明customerIDinRoom,沒有size()方法,但你仍然在調用它。聲明它是理智的,如std::vector<int>,它應該工作。

另外:

Room iRoom = listofrooms.get(i); 

這是從複製的listofrooms房間變成iRoom。這是比必要的更多的工作;你應該使用一個參考代替:

const Room& iRoom(listofrooms.get(i)); 
相關問題