c++ - 初始化 3d 字符数组

标签 c++ c++11

我在初始化我的 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/

相关文章:

c++ - 大小为 500000 的部分排序数组的快速排序段错误

c++ - std::endl 在字符串变量中?

c++ - 如何在模板化函数指针声明中读取这么多星号和括号?

c++ - 我应该如何编写函数参数来执行 move 而不是复制?

c++ - 如何搜索具有特定模式的文件的路径

c++ - 模板参数推导顺序

c++ - 模板函数无法将 'int' 转换为 nullptr_t

c++ - 为什么 std::get() 不能用于获取 vector 的成员?

c++ - 使用类型别名,例如使用 A = int(int)

c++ - 使用外部可执行文件作为管道的 Qt 'way' 是什么?