2017-11-04 7 views
1

を右辺値にする結合左辺値参照:エラー:私はこの断片を含む私のコードをコンパイルしようと

vector<vector<bool>> p(n); 
for(vector<bool>& i : p) { 
    i = vector<bool>(m); 
} 

for(vector<bool>& i : p) { 
     for(bool& j : i) { 
      int a = round(rand()/double(RAND_MAX)); 
      if(a) j = true; 
      else j = false; 
     } 
} 

はjはので、私はできない右辺値であるというエラーが発生しますその左辺値をバインドします。なぜそれは価値ですか?私が正しく理解していれば、それは表現ではなく、ベクトルiの記憶要素に存在します。さらに、ループを1つだけ使用するとうまく動作します。

私は簡単にループのために正常なとそれを置き換えることができることを知って、私はそれが間違っている理由を理解し、私は値を変更したい場合、私はforループをネストされたC++ 11を使用することができるかどうか知りたいです。

+0

最初のループの目的は何ですか?単純に 'ベクトル> p(n、ベクトル(m));'を実行しないでください。私は[this'std :: vector'リファレンス](http://en.cppreference.com/w/cpp/container/vector)、特に[コンストラクタリファレンス](http://en.cppreference.com/w/cpp/container/vector/vector)(オーバーロード2を参照)。 –

+0

あなたの問題については、代わりに 'auto'を使って型減算を使用してください。 –

答えて

2

std::vector<bool>boolインスタンスのベクトルではありません。説明はthe cppreference pageを参照してください。

ここで問題となるのは、bool& j : iiのすべての要素をbool&で表示しようとしていることです。しかし、実際にはブール値をi含まれていません - それは1のように振る舞う代理オブジェクトのいくつかの並べ替えを返します。


この最小限の例では、問題を再現:

std::vector<bool> i; 
for(bool& j : i) { } 

on godbolt

関連する問題