有关类型转换错误的帮助
Help with type conversion error
当我试图编译我的程序时,我得到以下错误:
main.cpp: In function ‘int main()’:
main.cpp:67: error: cannot convert ‘int (*)[(((long unsigned int)(((long int)mapSizeY) - 1)) + 1u)]’ to ‘int (*)[10]’ for argument ‘3’ to ‘void initializeMap(int, int, int (*)[10])’
main.cpp:68: error: cannot convert ‘int (*)[(((long unsigned int)(((long int)mapSizeY) - 1)) + 1u)]’ to ‘int (*)[10]’ for argument ‘3’ to ‘void paintMap(int, int, int (*)[10])’
我的代码如下:
#include <iostream>
using namespace std;
void initializeMap(int mapSizeX, int mapSizeY, int map[][10])
{
// Map details:
// 0 = # (wall)
// 1 = space (free space)
// 2 = x (player)
for(int x = 0; x < mapSizeX; x++)
{
map[x][0] = 0;
}
for(int y = 0; y < (mapSizeY - 2); y++)
{
map[0][y] = 0;
for(int x = 0; x < (mapSizeX - 2); x++)
{
map[x][y] = 1;
}
map[mapSizeX][y] = 0;
}
for(int x = 0; x < mapSizeX; x++)
{
map[x][mapSizeY - 1] = 0;
}
}
void paintMap(int mapSizeX, int mapSizeY, int map[][10])
{
for(int y = 0; y < mapSizeY; y++)
{
for(int x = 0; x < mapSizeX; x++)
{
switch(map[x][y])
{
case 0:
cout << "#";
break;
case 1:
cout << " ";
break;
case 2:
cout << "x";
break;
}
cout << map[x][y];
}
cout << endl;
}
}
int main()
{
int mapSizeX = 10;
int mapSizeY = 10;
int map[mapSizeX][mapSizeY];
initializeMap(mapSizeX, mapSizeY, map);
paintMap(mapSizeX, mapSizeY, map);
cout << endl << endl;
return 0;
}
我花了一个小时试图解决这个问题,花了大约二十分钟寻找解决方案。你们中有谁能帮我吗?
C++不支持可变长度数组,这就是代码中的map
。但是,有些编译器可能会将其作为非标准扩展来支持。然而,它肯定不会与期望使用"标准"数组的函数兼容。
如果您将mapSizeX
和mapSizeY
设为常量,这应该会起作用。
声明mapSizeX
和mapSizeY
const
。根据C++语言规范,您当前的代码基本上没有形成良好的格式,该规范只允许常量作为数组大小说明符。
错误消息完全是误导性的,这是因为一些编译器支持将其作为扩展,而最新的C语言标准也包含了它。
我在这里测试过。
函数调用期望第二个维度始终为10。您的代码在变量(mapSizeY
(中具有该维度,不能保证为10,即使您提前设置了一行。
将mapSizeY
更改为const int
,以便编译器可以对其进行优化。
如果在main方法中使mapSize[X|Y]
常量,这应该会起作用。或者,当您将维度传递给每个方法时,为什么不将矩阵作为int**
传递呢?
问题是可变长度的自动数组。解决此问题的一种方法是使main((中的项看起来与initializeMap((和paintMap((中相同。
int main()
{
int mapSizeX = 10;
// int mapSizeY = 10;
int map[mapSizeX][10];
initializeMap(mapSizeX, 10, map);
paintMap(mapSizeX, 10, map);
cout << endl << endl;
return 0;
}
我不建议简单地声明MapSize为常量。然后看起来数组是可变长度的,而实际上不是。
您还应该注意,可变长度自动数组是C89和C++的GNU扩展。
在initializeMap an paintMap函数中将定义map[][10]
更改为map[][]
或*map
。
相关文章:
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- C++:需要帮助了解运算符重载错误
- C++ DLL 运行时错误"abc.dll is not a valid WIN32 application" 。请帮助解决这个问题
- 我需要帮助创建一个评分系统,但它一直给我一个错误,注释掉的整数是给我带来麻烦的部分
- 需要一些帮助来查找我的程序中的逻辑错误
- 我用C++做了一个计算器,但我对"type of calculator"的要求循环了两次。有人可以帮助指出我的错误吗?
- 霍纳斯定律需要代数帮助,显示错误的答案 c++
- 错误:E0018 需要支架 - 需要帮助
- 任何人都可以在带有JNI的Android Studio上帮助我解决此错误,是否缺少一些内容?
- 需要帮助修复分段错误(核心转储)
- 需要帮助识别简单多线程代码中的错误
- 函数和指针帮助:程序生成,但崩溃,没有任何特定错误
- 需要帮助以了解错误消息
- 功能错误中的表达语法帮助!C/C
- For-Loop帮助获得错误的输出
- 帮助错误 C2259:无法实例化抽象类
- 调试帮助:C++错误
- 链接器错误-请帮助:错误LNK2001:无法解决的外部符号
- OpenCV帮助-错误:没有匹配' operator[] '(操作数类型是' cv::Mat '和' int ').&l
- 投票程序CPP帮助(错误输出)