Отладка DEQUE из char [4] [4] - PullRequest
       32

Отладка DEQUE из char [4] [4]

0 голосов
/ 21 января 2012

В приведенном ниже коде я не могу вставить исходную таблицу в deque и не могу присвоить начало deque в значении x .

Может кто-нибудь сказать мне, как это исправить?

Что я должен использовать вместо массива char, чтобы эта программа работала?

#include <iostream>
#include <deque>
using namespace std;

char x[4][4];
deque<char [4][4]> myStack;

char func(char initial[4][4])
{
     myStack.push_front(initial[4][4]); // ERROR1
     x[4][4]=myStack.front();            // ERROR2
}

Попытка скомпилировать выше приводит к ошибкам:

ОШИБКА1: ни один экземпляр перегруженной функции "std::deque<_Ty, _Ax>::push_front [with _Ty=char [4][4], _Ax=std::allocator<char [4][4]>]" не соответствует списку аргументов

ОШИБКА2: значение типа "char (*)[4]" не может быть присвоено объекту типа "char"

Ответы [ 3 ]

1 голос
/ 21 января 2012

Массивы в стиле C не являются гражданами первого класса в C или C ++.Они не могут быть скопированы, поэтому вы не можете поместить массив в контейнер.

Одно из возможных решений - сохранить массив внутри структуры, а затем сохранить структуру в deque.Другая идея может состоять в том, чтобы использовать std :: string вместо массивов символов.

1 голос
/ 21 января 2012

Существует несколько проблем, связанных с тем, как вы пытаетесь использовать массивы.

  1. Массивы в вашей программе не называются initial[4][4] или x[4][4].Они называются initial и x.
  2. Массивы нельзя передавать по значению в функцию.
  3. Массивы нельзя хранить в стандартных контейнерах.

В качестве начального исправления вы можете использовать тип boost::array<boost::array<char, 4>, 4>;так как это обертка объекта вокруг массива, это будет работать.Однако меня поражает, что хранение многомерного массива в контейнере, вероятно, неправильно;в зависимости от ваших требований, вы ищете что-то еще.К сожалению, мы не знаем, каковы ваши требования, поэтому я не могу предложить конкретные альтернативы.

Кроме того, вызов deque myStack очень запутанный.Стеки - это нечто другое.

1 голос
/ 21 января 2012

Вы не можете хранить массивы в стиле C. в контейнерах.

...