我在初始化我的 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();
};
最佳答案
这是你写的
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""i""i""b")"应该是什么,但你似乎错过了一些 C++ 基础知识。你真正想要的是更像
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;
}
关于c++ - 初始化 3d 字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18667554/