2013-09-06 2 views
0

У меня возникли проблемы с инициализацией моего массива char [] [] [] и отображением его, который я никогда не использовал, но должен использовать сейчас, поэтому я не очень хорошо знаком с ним. массив используется в системе бронирования, где пользователь е просит скажем каюту на палубе 1 колонке 1 строки 1, который должен быть «Я»инициализация массива 3d char

Заголовочный файл

#include <iostream> 
#include <string> 

using namespace std; 

class Ship 
{ 
public: 

Ship() 
{ 
} 

char cabins[13][4][1]; 
void setArray(); 
void showArray(); 
}; 
+3

Вы просто составляете синтаксис? Где ты придумал этот материал? –

ответ

1

Используйте фигурные скобки {} вокруг значения в инициализации, а не в скобках. Добавьте также запятые между ними! А также, что такое определение массива внутри цикла? О, мой ...

+1

и символы не строки. – FDinoff

+1

Да, в этой программе много чего можно пропустить ... :-) – nickie

0

Это должно быть это ...

cabins[k][j][i] 

В вы цикла, если вы пытаетесь инициализировать его при определенных индексов.

например.

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

Это установка значения на палубе 1 столбца 1 и строки 1 равно 1.

Когда вы цикл через эти 3 for петли вы приращением через i, j, k

Я не действительно понимаете, как вы назначаете значения для индекса, поэтому ... если вы уточните, что я мог бы помочь вам немного больше.

+0

Нет причин для этого быть 3-мерным массивом - это 2-й массив символов. Третье измерение - это его воображение. – kfsone

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;  
} 
Смежные вопросы