2012-01-21 3 views
0

디버깅 아래 코드에서 초기 테이블을 양키 큐에 넣을 수 없으며이 큐의 앞쪽에 값 x을 할당 할 수 없습니다.DEQUE char [4] [4]

누군가이 문제를 해결할 수있는 방법을 알려주시겠습니까?

이 프로그램을 작동 시키려면 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++의 일등 시민이 아닙니다. 복사 할 수 없으므로 컨테이너에 배열을 넣을 수 없습니다.

한 가지 가능한 솔루션은 구조체 내에 배열을 저장 한 다음 구조체를 deque에 저장하는 것입니다. 또 다른 아이디어는 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'의 문제점은 무엇입니까? –

관련 문제