2016-11-02 5 views
0
class LUT { 
public : 
vector <string> Allgate_name; 
vector<vector<double> > Cload_vals; 
vector<vector<double> > Tau_in_vals; 
vector<double [7][7] > All_delays; 
vector<double [7][7] > All_slews; 
void assignarrays(string); 
}; 

上記のコードは、私が7x7配列のベクトルを宣言していることを示しています。しかし、私はこのベクトルに7×7の配列をプッシュしようとすると、私は次のエラーを取得しています。配列は、中括弧で囲まれた初期設定子で初期化する必要があります。

「無効な配列の割り当て」「アレイは、中括弧で囲まれた初期化子で初期化されなければならない」

私はこのベクターにプッシュしています、配列の使う初期は単にこれです。

double NAND_loadtable_d [7][7]; 

ここで私は間違っていますか? UnholySheepは、あなたが初期化していない唯一の変数NAND_loadtable_d宣言しなければなりません書かれていたよう

+0

これは初期化ではなく、それはベクトルに7x7配列を「プッシュ」するために使用するコードを – UnholySheep

+0

に表示するという唯一の宣言です。 –

+3

実際に失敗するコードを表示してください。さらに、[mcve](/ help/mcve)を表示する – MikeMB

答えて

-4

double NAND_loadtable_d [][] = new double[7][]; 
for (int i = 0; i < 7; i++) { 
    NAND_loadtable_d[i] = new double[7]; 
} 
+0

['std :: array'](http://en.cppreference.com/w/cpp/container/array)を使うと(より良い?)勧告。また、ここでは[aggregate intialization](http://en.cppreference.com/w/cpp/language/aggregate_initialization)を使用することをお勧めします。 – UnholySheep

+0

質問の中核部分は*配列をどのように*初期化するかではなく、配列を 'std :: vector'に*プッシュする方法を求めているので、OPの質問に正しく答えることはできません。 OPがどのように近づいているかを知るまで、正しい答えが遅れるべきです。 –

2

std::vector::push_backは(あなたがそのようなNAND_loadtable_dとして左辺値を渡すとき)要素型がCopyAssignableであることが必要です。普通の古い配列はCopyAssignableではありません。

配列の代わりに、メンバ配列をラップするクラスを使用できます。幸いにも、標準ライブラリはあなたのためにそのようなラッパーを提供します:std::vector<std::array<std::array<double, 7>, 7>>

関連する問題