繁体   English   中英

表达式必须是可修改的左值

[英]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::beginstd::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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM