私は次のようなクラスを持っています:
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でのみ使用可能[デフォルトで有効] [エラー]:イニシャライザリストから配列に割り当て
私はそれをオンラインで少し調べましたが、これを回避する方法を本当に見つけることができませんでした。私は、クラスファイル内のクラスを編集しない方がいいと思います(目的を達成できません)。何か助け?
注:クラスは別のプロジェクトファイルにあります
初期化リストは初期化中にのみ使用できます。
初期化後にstd::initializer_list
を使用する場合:
auto init = std::initializer_list<double>({1.2,2.3,6.6});
std::copy(init.begin(), init.end(), your_array);
C++ 11を使用していない限り、拡張リストを初期化することはできません。
そして、もし私があなたの良い習慣なら、空の "[]"の代わりに*を使用して、サイズがわかっているときに(newまたはmallocで)メモリを割り当てることです。プログラムのdReturn型は、数学のポインタです。
また、ベクターの1つのメンバーのみに完全なリストを提供します。
People.dReturnType[0]={1.2,2.3,6.6};
それはもっと理にかなっています。
それを行うのにも役立つ初期化関数をカプセル化して使用/作成してみてください。 C++は最初にすべて0を配置しますが、関数を実行して以下を呼び出すことができます。
dialog People("the_atributes_are_here").
DReturnTypeをプライベートにし、関数を使用してデータにアクセスしたり、データを挿入/変更したりすることをお勧めします。しかし、それはあなた次第です。