错误:表达式必须具有类类型
ERROR : Expression must have class type?
我正在为管理酒店的类编写一个程序。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
};
错误是customerIDInRoom
是int
,但您正在对其调用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));
相关文章:
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 有没有办法一次声明相同类型的多个对象,并通过一个表达式立即使用相同的右值初始化它们?
- 表观调用前面的表达式必须具有指向 func 类型的指针
- 数组类型 int[n][n] 不可赋值,因为表达式必须具有常量值
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- C++ 编译错误:意外的类型名称"字符串":预期的表达式
- 表达式必须具有类类型 vs.
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 非类类型表达式的静态类型与动态类型之间的差异
- 如何确定涉及 C++ 中除法的算术表达式的数据类型
- 结构化绑定初始值设定项表单 { 赋值表达式 } 对于 clang 上的数组类型失败
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 带有数组类型表达式的错误分配
- 表示函数参数的元组的类型表达式
- 如何确定撤销类型表达式的更大类型
- c++ 11中有新的函数类型表达式格式吗?