15

次のようなクラスがあります。

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 でのみ使用可能 [デフォルトで有効] [エラー]: イニシャライザ リストから配列に割り当てています

私はそれをオンラインで少し調べましたが、実際にこれを回避する方法を見つけることができませんでした. クラスファイル内のクラスを編集しないことをお勧めします(ちょっと目的に反します)。何か助けはありますか?

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

4

2 に答える 2

21

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

初期化後に使用したい場合std::initializer_list

auto init = std::initializer_list<double>({1.2,2.3,6.6});
std::copy(init.begin(), init.end(), your_array);
于 2013-03-24T19:58:25.160 に答える
0

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

そして、私があなたの場合、空の "[]" の代わりに * を使用し、サイズがわかっているときに (new または malloc を使用して) メモリを割り当てることをお勧めします。プログラムの dReturn 型はマティクスのポインタです。

そして、ベクトルの 1 つのメンバーだけに完全なリストを与えています。

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

それはより理にかなっています。

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

dialog People("the_atributes_are_here").

dReturnType を非公開にし、関数を使用してデータにアクセスし、挿入/変更することをお勧めします。しかし、それはあなた次第です。

于 2013-03-24T20:12:30.497 に答える