2016-04-04 88 views
-1

容量6の構造体を別の構造体に格納しようとしています。この行に式は変更可能な左辺値でなければなりません

struct eachElement { 
    float centerX; 
    float centerY; 
    int flagMountain; 
}; 


eachElement cn[6]; 


struct characters { 
    eachElement each[6]; 
}; 


characters chars[1500]; 


float strtPt = 235.0; 
float initializer = strtPt; 
float endPt = 120.0; 
float holder = endPt; 
int count = 0; 
int ctr = 0; 
int cr = 0; 
int countCharacters = 0; 
int dup = 0; 


while (holder < m_img_height) { 

    for (float i = initializer ; i < m_img_width - 500;) { 

     float j = holder; 

     int ck = 1; 

     while (ck < 4) { 

      cvCircle(image, cvPoint(i, j), 3, cvScalar(0, 255, 0), 1); 
      cr = ctr++; 
      cn[cr].centerX = i; 
      cn[cr].centerY = j; 
      cn[cr].flagMountain = 1; 




      cvCircle(image, cvPoint(i + 5, j + 5), 1, cvScalar(0, 255, 0), 1); 


      j += 9.448; 

      count++; 


      ck++; 


     } 




     if (count == 6) { 
      i += 23.811; 

      count = 0; 
      ctr = 0; 

      dup = countCharacters++; 

      chars[dup].each = cn; 

     } 
     else 
      i += 9.448; 
} 

    holder += 56.686; 

} 

文字[DUP] .each = CN。

これは、expressionが変更可能な左辺値でなければならないというエラーが表示されます。

同じタイプに割り当てても、このエラーが発生します。

ご協力いただければ幸いです。

+0

を書くことができます。 'std :: vector'または' std :: array'を使います。 – molbdnilo

+0

main()メソッドはどこかにありますか? – Vyross

答えて

2

私はあなたのコードで実現しようとするのか分からないが、あなたはそれのいずれかの内臓のアクセスするeachメンバーアレイのための配列のインデックスを指定する必要があります。

chars[dup].each[0] = cn[0]; 
      // ^^^  ^^^ 

配列の先頭アドレスをすることはできません変更された

chars[dup].each = cn; 

したがって、コンパイラエラー。その使用std::copy()修正するには


:あなたの構造体は、バッファ

struct characters { 
    eachElement each[6]; 
}; 

を固定しているし、あなたのassignemt

chars[dup].each = cn; 

は法的になります

std::copy(std::begin(cn),std::end(cn),std::begin(chars[dup].each)); 
+0

私は、それぞれの完全な反復の後に文字構造体のそれぞれにサイズ6の構造体を格納しようとしています。 – chaitanyakrishna

+0

@chaitanyakrishna前述のように 'std :: copy()'を使用してください。 –

0

を(私はしないでください知っている構造体は次のようにした場合)の意味を行います場合:

struct characters { 
     eachElement * each; 
    }; 

コードは私のために理解するのは難しいですが、私はあなたの目標のための同等のソリューションを提案することはできません。しかし、このようなエラーメッセージの背景には、あなたの宣言与えられ、

多分ある - しかし、私は目標を理解していない - このスタイルは働くだろう:

for(int i=1;i<6;i++) 
    chars[dup].each[i] = cn; 
1

配列は、コピー代入演算子を持っていません。ある配列の各要素を別の配列にコピーする必要があります。

したがって、この文

chars[dup].each = cn; 

は間違っています。

標準アルゴリズムstd::copyを使用して、あるアレイを別のアレイにコピーすることができます。コンパイラは、関数std::beginstd::endをサポートしていない場合など

#include <algorithm> 

//... 

std::copy(std::begin(cn), std::end(cn), std::begin(chars[dup].each)); 

かについて、あなたはちょうどあなたが配列に割り当てることができません

#include <algorithm> 

//... 

std::copy(cn, cn + 6, chars[dup].each); 

または

std::copy(cn, cn + sizeof(cn)/sizeof(*cn), chars[dup].each); 
+0

ありがとうございました!コピー方法は素晴らしい! – chaitanyakrishna

関連する問題