2012-01-21 11 views
0

以下のコードでは、最初のテーブルを両端キューにプッシュすることができず、デキューの前面に値xを割り当てることができません。char [4] [4]のDEQUEのデバッグ

これを修正する方法を教えてもらえますか?

このプログラムを動作させるために、char配列の代わりに何を使用すればよいですか?

ERROR1:上記をコンパイルしようと

#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 
} 

エラー生成多重定義関数のインスタンスを "std::deque<_Ty, _Ax>::push_front [with _Ty=char [4][4], _Ax=std::allocator<char [4][4]>]" は引数リスト

ERROR2に一致: "char (*)[4]" タイプの値はできません「char」のエンティティに割り当てられる

+0

http://stackoverflow.com/questions/4612273/correct-way-to-work-with-vector-of-arrays –

+0

表現する2次元の文字配列は正確には何ですか? – fredoverflow

+0

@fredoverflow 15-puzzle –

答えて

1

Cスタイルを格納することはできませんコンテナ内の配列

+0

多次元配列でスタックを実装する方法に関する提案はありますか? –

1

Cスタイルの配列は、CまたはC++のファーストクラスの市民ではありません。それらはコピーできないので、配列をコンテナに入れることはできません。

考えられる解決策の1つは、配列を構造体の内部に格納し、構造体を両端キューに格納することです。別の考え方は、char配列の代わりにstd :: stringを使用することです。

+0

私は15パズルを処理する必要があるので、私はchar配列を使用します。あなたは[4] [4]配列をスタック内に作るための方法を知っていますか? –

+1

配列を含む 'struct puzzle'を持つことができます。 'struct'はコンテナに格納することができます(dequeのように)。 –

1

ここでは、配列を使用する方法にいくつかの問題があります。

  1. プログラム内の配列は、initial[4][4]またはx[4][4]とは呼ばれません。それらはinitialxと呼ばれます。
  2. 配列を値渡しで関数に渡すことはできません。
  3. 配列を標準コンテナに格納することはできません。

最初の修正として、タイプboost::array<boost::array<char, 4>, 4>を代わりに使用できます。それは配列を囲むオブジェクトラッパーなので、これはうまくいくでしょう。しかし、多次元配列をコンテナに格納するのはおそらく間違っていると私は思います。あなたの要件に応じて、あなたは何か他のことをしようとしています。残念ながら、私たちはあなたの必要条件がわからないので、私は特定の選択肢を提案することはできません。

また、dequemyStackを呼び出すことは非常に混乱します。スタックは別のものです。

+0

はい...と 'initial [4] [4]'と 'x [4] [4]'は、それらの配列の範囲外の要素の名前です。 –

+0

@Lightness私はdequeを使ってスタックを実装しています。これは間違っていますか? –

+0

@georgemano:あなたは確かに間違っています。そして、はい、私はそう言います。 'std :: stack'の何が問題なのですか? –

関連する問題