调试char的DEQUE [4] [4]

时间:2012-01-21 16:41:31

标签: c++ arrays stl 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 个答案:

答案 0 :(得分:1)

您无法在容器中存储C风格的数组。

答案 1 :(得分:1)

C样式数组不是C或C ++中的一等公民。它们无法复制,因此您无法将数组放入容器中。

一种可能的解决方案是将数组存储在结构中,然后将结构存储在双端队列中。另一个想法是使用std :: string而不是char数组。

答案 2 :(得分:1)

这里有一些问题与您尝试使用数组的方式有关。

  1. 程序中的数组不会被称为initial[4][4]x[4][4]。它们被称为initialx
  2. 无法通过值将数组传递给函数。
  3. 数组不能存储在标准容器中。
  4. 作为初始修复,您可以使用boost::array<boost::array<char, 4>, 4>类型;因为它是一个数组的对象包装器,所以这将有效。然而,让我觉得在容器中存储多维数组可能是错误的;根据您的要求,您希望做其他事情。不幸的是,我们不知道您的要求是什么,因此我无法提出具体的替代方案。

    此外,呼叫deque myStack非常令人困惑。堆栈是别的东西。