我在初始化我的char [] [] []数组时遇到了问题,并显示了我从未真正使用过的数据,但必须立即使用,所以我对它不是很熟悉。该阵列用于预订系统,用户e要求在甲板1栏1第1行说出一个应该是“i”的小屋
标头文件
#include <iostream>
#include <string>
using namespace std;
class Ship
{
public:
Ship()
{
}
char cabins[13][4][1];
void setArray();
void showArray();
};
答案 0 :(得分:2)
你写了这个
for (int k = 0; k < 13; k++)
{
for (int j = 0; j< 1; j++)
{
for (int i = 0; i< 4; i++)
{
cabins[13][4][1] = (("b" "i" "i" "b")
哪个会遍历数组中的所有字符,然后尝试分配整个数组,如果它有效,或者是有效的C ++。
我不确定“(”b“”我“”我“”b“)应该是什么,但你似乎错过了一些C ++基础知识。你真正想要的是更像是什么< / p>
char cabins[13][4]; // only needs to be 2d.
void Ship::setArray()
{
cabins = {
{ 'b', 'i', 'i', 'b' },
{ 'b', 'i', 'i', 'b' },
...
};
}
[编辑:我早点回来,在笔记本电脑上工作,对不起]
这也行不通。如果这里的数组定义是持久的,你需要将它存储在某个地方。
这是一个完整的单一编译单元示例,说明如何解决它:
#include <iostream>
#include <cstring> // for memcpy
class Ship {
public:
Ship() {}
char m_cabins[4][4];
void setArray();
};
void Ship::setArray() {
static const char defaultCabinLayout[4][4] = {
{ 'b', 'i', 'i', 'b' },
{ 'b', 'i', 'i', 'b' },
{ 'w', 'i', 'i', 'w' },
{ 'w', 'i', 'i', 'w' },
};
static_assert(sizeof(m_cabins) == sizeof(defaultCabinLayout), "defaultCabinLayout does not match m_cabins");
memcpy(m_cabins, defaultCabinLayout, sizeof(m_cabins));
}
int main() {
Ship s;
s.setArray();
std::cout << "cabins[0][0] = " << s.m_cabins[0][0] << std::endl;
}
答案 1 :(得分:1)
在初始化中使用大括号{
}
,而不是括号。
在它们之间添加逗号!
而且,数组在循环中的定义是什么?
哦,我的......
答案 2 :(得分:0)
应该是这个......
cabins[k][j][i]
如果您尝试在某些索引处初始化它,那么在循环中。
例如。
cabins[1][1][1] = 1;
这是将deck 1列1和行1的值设置为1。
当您循环浏览这3个for
循环时,您正在递增i, j, k
我真的不明白你是如何为每个索引分配值的......所以如果你详细说明我可以帮助你多一点。