【问题标题】:How can I access a string, within an object, within an array?如何访问对象内、数组内的字符串?
【发布时间】: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() 无法工作。
  • 您犯了一个常见的错误,即先编写一堆代码,然后才尝试编译整个代码并查看它是否有效。专业程序员不是这样工作的。他们只写了几行代码,编译,测试它以确保他们所写的内容正确,然后编写接下来的几行代码,依此类推。你可以更快地废弃整个事情并从头开始,以非常小的步骤工作,并在每个步骤之后测试你写的内容。

标签: c++ arrays loops class


【解决方案1】:

如果 (arr[i] == c) 你应该在你的 Camper 中覆盖你的 '=='

bool operator==(const Camper &a,const Camper &b) 
{
   //...
}

【讨论】:

  • 谢谢!这有效,但我现在有更多问题哈哈
  • 我现在有更多问题我的建议是使用调试器。我的意思是使用它一次单步执行您的代码 1 行。查看您所做的每一步中的重要变量,直到代码的行为与您预期的不同。
【解决方案2】:

数组被衰减为函数参数中的指针。您的arr 的类型是Camper*sizeof(arr) 不会返回您期望的值。您必须提供元素的数量作为单独的参数。

【讨论】:

    猜你喜欢
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    相关资源
    最近更新 更多