2012-01-30 3 views
0

저는 cocos2dx에서 게임을 작성하고 있습니다. 나는 몇 번 호출되는 메서드를 리팩토링하려고합니다. vehicletype의 enum에서 2 차원 배열을 반환하고 싶습니다.C++의 스위치 케이스에서 2 차원 배열 반환

어떻게하면 다음과 같은 결과를 얻을 수 있습니까 ??

int Vehicle::getVehicle(VehicleTypes vehicletypes) 
{ 

int vehicle[8][8] = {0}; 

switch (vehicleType) { 
    case Car: 
      // --- ARRAY 1 ------ 

      vehicle = { 
       { 0,0,0,0,0,0,0,0 }, 
       { 0,0,1,2,5,8,0,0 }, 
       { 0,0,5,3,4,5,0,0 }, 
       { 0,0,0,6,0,7,0,0 }, 
       { 0,0,0,0,0,0,0,0 }, 
       { 0,0,0,0,0,0,0,0 }, 
       { 0,0,0,0,0,0,0,0 }, 
       { 0,0,0,0,0,0,0,0 }, 
      }; 
      break; 
    case Bus: 
     { 
      // --- ARRAY 2 ------ 

      Vehicle = { 
       { 0,0,0,0,0,0,0,0 }, 
       { 0,0,0,0,1,2,0,0 }, 
       { 0,0,3,4,5,0,0,0 }, 
       { 0,0,6,8,7,0,0,0 }, 
       { 0,0,0,0,0,0,0,0 }, 
       { 0,0,0,0,0,0,0,0 }, 
       { 0,0,0,0,0,0,0,0 }, 
       { 0,0,0,0,0,0,0,0 }, 
      }; 
      break; 
     } 
    default: 
     break; 
    } 

return vehicle; 
} 

감사

+0

버스 케이스에서 올바른 변수 이름을 사용하면 도움이 될 수 있습니다. 'Vehicle! = vehicle'. –

+1

반환 된 배열을 수정해야합니까? 위의 수정 후 – hmjd

+1

: http://stackoverflow.com/questions/3716595/c-returning-multidimension-array-from-function의 거의 정확한 사본처럼 보입니다. int x [] []를 int로 반환 할 수 없습니다. –

답변

1
typedef const int (*matrix_ptr)[8]; 

데모 : 왜 당신은 배열을 사용하는 http://ideone.com/i1Tc2

+0

건배, 나는 이걸로 일할 수 있습니다. 상속을 사용하면 더 완벽하게 재 작성 될 수 있습니다. –

0

? 벡터와 같은 STL 컨테이너 중 하나를 사용해야합니다. 어쨌든, C++의 2D int 배열은 기본적으로 int의 포인터에 대한 포인터입니다. 함수의 호출자는 힙 또는 스택에 할당 된 2D 배열을 제공하고이를 in/out 인수로 전달하거나 "호출 수신자"(이 함수)가 힙에 2D 배열을 할당 한 다음이를 다시 방문객. 후자의 경우 호출자는 이제 메모리 할당을 해제해야합니다.

+1

아니요, "2D int array"는 1 차원 배열 int에 대한 포인터로 붕괴하는 배열입니다. 'int [n] [m]'은'int **'로 감쇠되지 않습니다. –

+0

글쎄, 지금까지 나는 cocos2dx를 사용하고 있기 때문에 지금까지 c/C++ (내가 아는 것은 !!)을이 개발에서 사용했다. 나는 일을하는 비주얼 스튜디오에서 개발 중이고, 그 다음 모든 일을 맥에서 xcode로 옮기고 아이폰으로 밀고있다. STL 컨테이너가 여전히 Mac에서 호환됩니까? 어쩌면 환호를 찾을 시간 –