[英]Expression must be modifiable lvalue
我正在尝试将容量为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;
}
在这一行,
chars [dup] .each = cn;
这给我一个错误,说表达式必须是可修改的左值。
即使我将其分配给相同的类型,也出现了此错误。
任何帮助,将不胜感激。
我不知道您想用代码实现什么,但是您必须为each
成员数组指定一个数组索引才能访问它的任何内部变量:
chars[dup].each[0] = cn[0];
// ^^^ ^^^
阵列起始地址无法更改
chars[dup].each = cn;
因此,编译器错误。
要解决这个问题,请使用std::copy()
:
std::copy(std::begin(cn),std::end(cn),std::begin(chars[dup].each));
数组没有副本分配运算符。 您必须将一个数组的每个元素复制到另一个数组。
因此,这句话
chars[dup].each = cn;
是错的。
您可以使用标准算法std::copy
将一个数组复制到另一个数组中。 例如
#include <algorithm>
//...
std::copy( std::begin( cn ), std::end( cn ), std::begin( chars[dup].each ) );
或者,如果编译器不支持函数std::begin
和std::end
那么您可以编写
#include <algorithm>
//...
std::copy( cn, cn + 6, chars[dup].each );
要么
std::copy( cn, cn + sizeof( cn ) / sizeof( *cn ), chars[dup].each );
您的结构具有固定的缓冲区
struct characters {
eachElement each[6];
};
和你的分配
chars[dup].each = cn;
如果这个结构是合法的(我不知道是否有意义):
struct characters {
eachElement * each;
};
我很难理解代码,我无法为您的目标提出等效的解决方案。 但这是错误消息的背景
也许,考虑到您的声明-但我不明白目标-这种样式会起作用:
for(int i=1;i<6;i++)
chars[dup].each[i] = cn;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.