编译错误:尝试将数组分配给数组时,从不兼容的类型“ char”分配给“ int”

时间:2018-07-05 10:19:59

标签: c++

我正在尝试编写一个程序,该程序将具有类似列表的列表

{{},{},{}}

其中每个列表将是y值,而其中的内部是x值。

当我尝试编译程序时,标题出现错误。

程序的相关部分:

void genRand(){

int x;
int y;

cin >> x;
cin >> y;

int world[y];


for(int yv = 0; yv == y; yv++){

    char ylist[x];

    for(int xv = 0; xv == x; xv++){

        char symbols[2] = {'-', '#'};

        int randIndex = rand() % 2;

        ylist[xv] = symbols[randIndex];
    }

    world[yv] = ylist;


}


error: assigning to 'int' from
      incompatible type 'int [x]'
                world[yv] = ylist;
                            ^

我该如何解决?它在上方的行中工作正常,但再次尝试时突然中断。

3 个答案:

答案 0 :(得分:1)

您正在尝试将string值放入int数组中。

int world[y]应该是string数组,因此将其更改为string world[y]

答案 1 :(得分:1)

ylist->字符数组类型

char ylist[x];

world[yv]->整数

int world[y];

导致错误的问题是我们将字符数组类型设置为整数类型。

我们可以通过实际更改数据类型来解决此问题,以使我们设置的内容和处理程序相同。

答案 2 :(得分:1)

报告了转化问题:

  

错误:从分配给'int'

     

不兼容的类型'int [x]'

     

world [yv] = ylist;

因此请记住,数组只是存储在连续内存块中的多个数据值。 “ char”和“ int”在内存中的格式完全不同,因此,如果您尝试将它们读取为不同的数据类型,则会得到意想不到的结果。物理上,“字符”在内存中只有1个字节,而“整数”为4,因此,如果您要将ASCII数字存储为整数,则需要先将其转换为整数。

我相信这可以解决您遇到的问题:

    int num = static_cast<int>(letter); // if letter='A', num=10

[注意]-ASCII数字值从0到9开始,然后是字母字符。考虑使用异常处理来捕获不良数据将是一个好主意。