web-dev-qa-db-ja.com

エラー:初期化子リストから配列に割り当て

私は次のようなクラスを持っています:

class dialog
{
    public:
    double dReturnType[][5][3];
};

#include <cstdlib>
#include <iostream>
include <string>

using namespace std;
#include "dialog.h";

int main(int argc, char *argv[])
{
    dialog People;
    People.dReturnType[0][1] = {1.2,2.3,6.6};
    return 0;
}

それは返します:

[警告]拡張イニシャライザリストは-std = c ++ 11または-std = gnu11でのみ使用可能[デフォルトで有効] [エラー]:イニシャライザリストから配列に割り当て

私はそれをオンラインで少し調べましたが、これを回避する方法を本当に見つけることができませんでした。私は、クラスファイル内のクラスを編集しない方がいいと思います(目的を達成できません)。何か助け?

注:クラスは別のプロジェクトファイルにあります

15
Kearito

初期化リストは初期化中にのみ使用できます。

初期化後にstd::initializer_listを使用する場合:

auto init = std::initializer_list<double>({1.2,2.3,6.6});
std::copy(init.begin(), init.end(), your_array);
18
deepmax

C++ 11を使用していない限り、拡張リストを初期化することはできません。

そして、もし私があなたの良い習慣なら、空の "[]"の代わりに*を使用して、サイズがわかっているときに(newまたはmallocで)メモリを割り当てることです。プログラムのdReturn型は、数学のポインタです。

また、ベクターの1つのメンバーのみに完全なリストを提供します。

People.dReturnType[0]={1.2,2.3,6.6};

それはもっと理にかなっています。

それを行うのにも役立つ初期化関数をカプセル化して使用/作成してみてください。 C++は最初にすべて0を配置しますが、関数を実行して以下を呼び出すことができます。

dialog People("the_atributes_are_here").

DReturnTypeをプライベートにし、関数を使用してデータにアクセスしたり、データを挿入/変更したりすることをお勧めします。しかし、それはあなた次第です。

0
Breno Santos