3

このYouTube ビデオ チュートリアル シリーズに従って、c++11 配列を試しています。私は自分の IDE の使用にあまり熟練していませんが、IDE の Eclipse とコードブロックの両方を使用して、少なくともそれらを許可する C++0x ISO 言語標準 [-std=c++0x] に従うようにコンパイラーを設定しています。などの c++11 配列の構文を理解するには、array <double, 5> rainfall; どちらも同じように応答します。私が書いた次のコードは、この配列を出力する関数に渡します。

#include <iostream>
#include <array>

using namespace std;

void printArray(double[], int);

int main()
{
    array <double, 5> rainfall;

    rainfall[0] = 2.3;
    rainfall[1] = 0.3;
    rainfall[2] = 0.0;
    rainfall[3] = 4.1;
    rainfall[4] = 0.5;

    printArray(rainfall, 5);

    return 0;
}

void printArray(double array[], int size)
{
    for(int i = 0; i < size; i++)
    {
        cout << array[i] << " | ";
    }
}

このような c++11 以外の配列でdouble rainfall[5]は問題なく動作しarray <double, 5> rainfallますが、cannot convert 'std::array<double, 5u>' to 'double*' for argument '1' to 'void printArray(double*, int) The video I am following uses the same code, still receive this error というエラーがあります。

4

3 に答える 3

9

ご覧のとおり、あなたが使用しているビデオでは、男は暗黙的に T* に変換できる静的な c スタイルの配列を使用していますが、静的配列への暗黙的な変換を持たない c++11 配列を使用しています。 . ただし、C++11 の配列クラスにはメソッド データがあり、基礎となるデータに直接アクセスできます。

ただし、この場合、c++11 配列で関数を使用する場合は、次のようにオーバーロードを作成できます。

template <typename T, size_t Size> void printArray(const std::array<T, Size>& arr);

これは任意のサイズで機能し、サイズに別の (不要な) パラメータを渡す必要はありません;)

于 2013-04-02T18:41:58.220 に答える
4

関数に渡すことができrainfall.data()ます。Anstd::array<T, N>は暗黙的に に変換できませんT[N]

于 2013-04-02T18:21:11.987 に答える
2

または、関数を次のように定義できます

void printArray (const array <double, 5>& myarray, int size)
于 2013-04-02T18:25:01.827 に答える