0

我在初始化我的 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();
};
4

3 回答 3

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" "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;    
}
于 2013-09-06T22:53:24.377 回答
1

{ }在初始化中使用大括号,而不是括号。中间也加逗号!而且,数组的定义在你的循环中做了什么?天啊...

于 2013-09-06T22:35:03.507 回答
0

应该是这个...

cabins[k][j][i] 

如果您尝试在某些索引处对其进行初始化,则在您的循环中。

例如。

cabins[1][1][1] = 1; 

这将甲板 1 第 1 列和第 1 行的值设置为 1。

当您循环通过这 3 个for循环时,您正在递增i, j, k

我真的不明白您如何为每个索引分配值,所以....如果您详细说明,我可以为您提供更多帮助。

于 2013-09-06T22:38:05.203 回答