2016-07-01 2 views
4

우선, 나는 C++에 매우 익숙하므로 의사 코드 및/또는 Python으로 들어가서 내가 무엇을하려고하는지 설명해야 할 수도 있습니다. do ...C++에서 좌표 집합의 배열 저장하기 (쌍의 벡터 벡터)

애니메이션의 각 프레임에 대해 여러 개의 스프라이트에 대해 X 및 Y 좌표 쌍을 저장하려고합니다. 내가 좋아하는이 될 것을 예상 다음 - 가정이 PLAIN == 1 (열거 사용) :

animationFrames[PLAIN][0] = { 20, 50 } 
animationFrames[PLAIN][1] = { 25, 55 } 

기타 등등이. 필자는 본질적으로 해당 스프라이트의 ID로 animationFrames를 쿼리하고 반복 할 X, Y 좌표 집합을받을 수 있기를 원합니다. 이건 꽤 까다 롭습니다. 다음은 작동하지 않습니다 내 시도 ... 이것은 다음과 같은 오류 메시지가 발생

std::vector< std::vector< std::pair<int, int> > > frames = { 
    { 
     { 1, 1 }, { 2, 2 } // two frames for sprite A 
    }, 
    { 
     { 3, 3 }, { 4, 4 } // two frames for sprite B 
    } 
}; 

이다 : 나는 벡터, 쌍, 및 배열의 ​​다양한 변이를 시도했습니다

prog.cpp: In function 'int main()': 
prog.cpp:15: error: braces around initializer for non-aggregate type 'std::vector<std::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > >, std::allocator<std::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > > > >' 

,하지만 내가 할 수있는 그걸 알아내는 것 같아.

미리 감사드립니다.

+0

하면, 오류를 포함해야을 메시지. :) – davmac

+0

좋은 지적! 난 그냥 뭔가 불가능한 시도했다 ...하지만 여기에 간다 :'prog.cpp : 함수에서 'int main()': prog.cpp : 15 : 오류 : 비 집계 형식에 대한 이니셜 라이저 주위에 중괄호 'std :: 벡터 std :: vector :: std :: pair , std :: allocator >, std :: allocator , std :: allocator >>> '' – Benwithjamin91

+0

아니요, 질문에 포함하십시오 ._! (오류 메시지가 포함되도록 질문을 편집하십시오.) – davmac

답변

1

저는 컴파일러가 C++ 11 표준을 처리 할 수 ​​없다고 생각합니다. 즉, 중괄호 초기화를 지원하지 않는다는 의미입니다. 하나씩 항목을 추가 할 수 있습니다.

std::vector<std::vector<std::pair<int, int> > > frames(2); 
std::vector<std::pair<int, int> > &v1 = frames[0]; 
v1.push_back(std::pair<int, int>(1, 1)); 
v1.push_back(std::pair<int, int>(2, 2)); 
std::vector<std::pair<int, int> > &v2 = frames[1]; 
v2.push_back(std::pair<int, int>(3, 3)); 
v2.push_back(std::pair<int, int>(4, 4)); 

많은 문제가 있지만 작동해야합니다. 반면에 컴파일러는 C++ 11을 지원하는 경우, 당신도 = 필요가 없습니다, 당신은 약간의 공백을 제거 할 수 있습니다 : 당신이 컴파일 오류가 발생하는 경우

std::vector<std::vector<std::pair<int, int>>> frames { 
    { 
     { 1, 1 }, { 2, 2 } // two frames for sprite A 
    }, 
    { 
     { 3, 3 }, { 4, 4 } // two frames for sprite B 
    } 
};