2

すべての実数を配列に配置するプログラムを作成しようとしています-数値の順序付けは別の関数で行われます-降順になり、それらを出力します。

以下は、これまでのプログラムですが、コンパイラによると、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*)'" が得られます。

これら 2 つのエラーが発生する理由はよくわかりませんが、解決するための助けが必要です。

#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;
}
4

2 に答える 2

0

最初のエラーはN[t]a double(「の t 番目の要素」を意味する) であるためですNが、関数は a を返しますdouble*。あなたの関数は、実際には何も返さないように見えます。が指すデータをソートするNので、何も返す必要はありません。voidおそらく戻り値に切り替える必要があります。

2番目のエラーは、Q[100]is a double(「 の 101 番目の要素、Qis の最後の要素がQisQ[99]であるため、いずれにせよエラーであることを意味します。C++ の配列インデックスは 1 ではなく 0 から始まるためです) が、関数が adoubleを期待しているからです。あなたが実際にやろうとしていることは次のとおりです。

sort_array(Q)

最初の要素へのポインタを直接渡します。

配列を渡すときは、配列の最初の要素のアドレスを渡すだけでよいことに注意してください。この場合、Qと同等です&Q[0]が、より簡単に記述できます。

于 2012-11-15T15:41:49.637 に答える
0

問題はsort_array(Q[100])発言です。これは、配列sort_array内の 101 番目の double を使用して呼び出すようにコンパイラに指示しています(これは実際には範囲外です)。の代わりにQ単に渡したかっただけです。QQ[100]

ただし、double*たとえば C スタイルの配列を渡すと長さ情報が失われ、正規の C++ ではないことに注意してください。vector代わりに、配列とサイズを運ぶために使用できます。

編集:そして、データをその場で変更しているので、関数が何かを返す必要はまったくありません。それを void に変更し、最後の return をスキップするだけです。次に、ベクター/配列を反復処理して、各要素を出力する必要があります。cout集計を印刷する組み込み機能は提供されません。

最後に、The Definitive C++ Book Guide and Listの本は、C++ の概念を理解するのに役立つかもしれません。

于 2012-11-15T15:42:48.067 に答える