【发布时间】:2019-09-18 16:14:03
【问题描述】:
我正在尝试访问对象数组中的字符串值。该字符串用于创建原始对象。
我有 Camper 类,它有构造函数 Camper(string name); 然后我从我的 Camper 类中创建了一个数组。我想编写一个 if 语句来捕获“名称”字符串以与用户输入的字符串进行比较。
我的错误:
E0711 表达式必须为 bool 类型(或可转换为 bool)
C2451 'Camper' 类型的条件表达式是非法的
我确定这些错误指的是同一个问题。
我对 C++ 非常陌生,所以如果您发现任何其他对您没有意义的内容,或者这只是不可行的,请告诉我。谢谢。
void addPayment(Camper arr[]) {
string name;
cout << " What is the camper's name? ";
cin >> name;
Camper c = Camper(name);
for (int i = 0; i < sizeof(arr); ++i) {
if (arr[i] == c) { // Here is where I have the bug
c.pay(); // What should I use instead of arr[i]?
}
}
cout << " " << name << " has paid.";
}
【问题讨论】:
-
if (arr[i] = c) {请注意,=是赋值而不是比较。使用==进行比较 -
显示的代码中有多个错误。
=vs==是最少的问题。对于初学者来说,这个sizeof()并没有做你认为它做的事情。sizeof不是这样工作的,请参阅您的 C++ 书籍以获取完整说明,包括将数组作为参数传递的含义。提示:此函数的参数不是数组。这是一个指针。指针的sizeof始终相同,无论底层数组有一个元素还是十亿个元素。显示的代码将无法正常工作。 -
是的,它只是不适用于 = 或 == 所以我离开它来问这个问题。 - 固定
-
void addPayment(Camper arr[])如果不能使用 std::vector ,则必须传递数组中的项目数。sizeof()无法工作。 -
您犯了一个常见的错误,即先编写一堆代码,然后才尝试编译整个代码并查看它是否有效。专业程序员不是这样工作的。他们只写了几行代码,编译,测试它以确保他们所写的内容正确,然后编写接下来的几行代码,依此类推。你可以更快地废弃整个事情并从头开始,以非常小的步骤工作,并在每个步骤之后测试你写的内容。