错误:数组下标的无效类型'double * [double]'

时间:2012-11-15 15:38:41

标签: c++ arrays subscript

我正在尝试创建一个程序,它将所有实数放在一个数组中 - 数字的排序发生在一个单独的函数中 - 按降序排列,并打印出来。

以下是我到目前为止的程序,但根据编译器的说法,它有2个问题: (i)在第22行(​​"return N[t];"),我得到“error: invalid types 'double*[double]' for array subscript” (ii)在第28行(“cout << sort_array(Q[100]) << " " "),我得到”error: cannot convert 'double' to 'double*' for argument '1' to 'double* sort_array(double*)'“。

我不太明白为什么会出现这两个错误,但我希望能帮助你解决这些错误。

#include <iostream>
#include <cstdlib>

using namespace std;

double *sort_array (double *N) {
double t;
    int size=100, a, b;

for (t=0; t<size; t++)
        *N = rand()%250;

    for (a=1; a<size; a++) {
        for (b=size-1; b>=a; b--) {
            if (N[b-1] < N[b]) {
                t = N[b-1];
                N[b-1] = N[b];
                N[b] = t;
            }
        }
    }
    return N[t];
}

int main()
{
    double Q[100];
        cout << sort_array(Q[100]) << " ";
        cout << endl;


    return 0;
}

2 个答案:

答案 0 :(得分:0)

第一个错误是因为N[t]double(意思是“{1}}的第t个元素”),但是您的函数返回N。实际上,你的功能看起来不应该返回任何东西。它对double*指向的数据进行排序,因此无需返回任何内容。您应该切换到N返回值。

第二个错误是因为voidQ[100](它意味着“double的第101个元素,这是一个错误,因为Q的最后一个元素是Q,因为C ++中的数组索引从0开始,而不是1),但是你的函数需要Q[99]。我假设你真正想做的是:

double

将指针直接传递给第一个元素。

请记住,在传递数组时,您只需要传递数组的第一个元素的地址。在这种情况下,sort_array(Q) ,相当于Q,但更容易编写。

答案 1 :(得分:0)

问题是sort_array(Q[100])声明。这告诉编译器使用sort_array数组中的第101个双精度调用Q(实际上是超出界限)。你真的想传递Q而不是Q[100]

但是,请注意,将C样式数组作为double*传递会丢失长度信息,而不是规范的C ++。相反,您可以使用vector来携带数组和大小。

编辑:由于您正在修改数据,因此您的函数根本不需要返回任何内容。将其更改为无效,并在最后跳过返回。然后,您必须遍历矢量/数组以打印出每个元素。 cout不提供打印聚合的内置功能。<​​/ p>

最后,The Definitive C++ Book Guide and List中的一本书可能会帮助您快速了解C ++概念。