如何修复“运算符 \[\] 不匹配”错误 (c)

新手上路,请多包涵

所以我得到了这个数组: int arr[] = {60,70,30,15,17,80,16,75,90,85,40,75};

我必须在这个数组中“适应”尽可能多的元素,同时它们的总和小于 500(基本上删除最大的元素,直到总和小于 500)。

这是我尝试过的:

 #include <iostream>
#include <algorithm>
#include <list>

using namespace std;

int largestOfArray(int number[]);

int main()
{
    int sum = 0;
    int i = 0;
    int arr[] = {60,70,30,15,17,80,16,75,90,85,40,75};
    list<int> ar(arr,arr+12);

    for (i = 0; i < 12;i++)
        sum += arr[i];

    while (sum > 500)
        ar.remove(largestOfArray(arr[12]));

    for (i = 0; i < 12;i++)
        sum += arr[i];

    for (i = 0;i < 12; i++)
        cout << arr[i];

    cout << sum;
    return 0;
}

int largestOfArray(int number[12]){
    int i = 0;
    int largest = number[0];
    for (i = 0;i < 12;i++){
        if (largest < number[i]) largest = number[i];
    }
    return largest;
}

我不断收到此错误:

‘operator[]’ 不匹配(操作数类型为 ‘std::__cxx11::list’ 和 ‘int’)

我知道它与 ar.remove(largestOfArray(ar[12])); ,但我不知道如何解决它。

原文由 Alpha 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 445
2 个回答

首先,您同时使用 ararr ,而 arr 是一个数组,而 ar 是一个列表。这让读者和(事实证明)代码作者都感到困惑。

在 C++ 中,std::list 没有随机访问。您不能使用 ar[] ,因为没有为列表定义 operator[]。此外, largestOfArray 需要一个数组,而不是一个列表。您可能打算在那里使用 arr 而不是 ar

原文由 davidlowryduda 发布,翻译遵循 CC BY-SA 4.0 许可协议

你的问题是传递数组:

您不传递数组如下:

 function(arr[10])

上面的行将第 11 个元素传递给 function()

要传递整个数组,您传递数组的名称。

 function(arr)

在你的情况下:

 largestOfArray(arr[12])

通过 arr

这应该是:

 largestOfArray(arr)

在这一行:

 while (sum > 500) ar.remove(largestOfArray(arr[10]));

编辑:现在我看到发生了什么, std::list 没有运营商 [] https://en.cppreference.com/w/cpp/container/list 为什么不这样做有它?这可能会有所帮助: https ://thispointer.com/difference-between-vector-and-list-in-c/

基本上

largestOfArray() 接受数组,所以我不知道你的意思是通过 arrar

原文由 user5550963 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏