【问题标题】:error: invalid types 'double*[double]' for array subscript错误:数组下标的类型“double * [double]”无效
【发布时间】:2012-11-04 06:05:05
【问题描述】:

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

以下是我目前拥有的程序,但根据编译器的说法,它有两个问题: (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;
}

【问题讨论】:

    标签: c++ arrays subscript


    【解决方案1】:

    问题在于sort_array(Q[100]) 语句。这告诉编译器使用Q 数组中的第 101 个双精度调用sort_array(实际上超出了范围)。您真的只想传入Q 而不是Q[100]

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

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

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

    【讨论】:

    • 好的,但是我该如何处理第 22 行的错误呢?我应该在这里返回什么?
    • @user1791960:如果函数应该返回一个指向数组的指针,那么return N;。但是返回任何东西没有多大意义,因为调用者已经知道数组在哪里。
    • 好的。问题是我被告知:“排序应该编码为单独的函数 double* sort_array(double* )。”也许对我来说一个更好的问题是我可以做出哪些改变,这样就是这样 - 并且该程序确实有效。老实说,我不懂 C++ 的大部分内容,但我只需要再读 1 个月 - 所以现在买这本书没什么意义。
    【解决方案2】:

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

    第二个错误是因为Q[100]double(它的意思是“Q 的第 101 个元素,因为Q 的最后一个元素是Q[99],因为数组索引在C++ 从 0 开始,而不是 1),但您的函数需要 double。我假设您的实际意思是:

    sort_array(Q)
    

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

    请记住,在传递数组时,您只需要传递数组第一个元素的地址。在本例中为Q,相当于&amp;Q[0],但更容易编写。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多