2009-08-15 5 views
9

는 그래서 같은 D3DXMATRIXA16위한 벡터 만들려고 해요 : vector<D3DXMATRIXA16> matrices; 및 오류 얻고있다 :오류 C2719 : '_Val': __declspec (formal ('16 '))이있는 형식 매개 변수가 정렬되지 않습니다?

 d:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(717) : 

error C2719: '_Val': formal parameter with __declspec(align('16')) won't be aligned

e:\projects\emuntitled\em\emscratch\emshadow.h(60) : 

:see reference to class template instantiation 'std::vector<_Ty>' being compiled with [ _Ty=D3DXMATRIXA16 ]

왜 정확하게를?

도움 주셔서 감사합니다.

+0

어디에서 코드를 게시 할 수 있습니까? – Tchami

답변

14

stl :: vector가 D3DXMATRIXA16과 같은 정렬 된 데이터를 제대로 포함 할 수없는 것이 known issue입니다. 하나의 포스터 pinned the root cause (또는 적어도 하나는?) : vector :: resize의 선언은 정렬 된 데이터를 const 참조가 아닌 값으로 전달합니다. 그 스레드에서 몇 가지 해결 방법이 제안되었으므로 이 stl :: vector를 모두 삭제하는 것이 가장 안전합니다.. stl 헤더를 직접 수정하고 다시 컴파일해야 할 수도 있습니다. 실제로 이것은 소리보다 쉽지만 실제로 그렇게하지는 않았습니다.

편집 : 링크가 끊어졌습니다 (@David Menard에게 감사). 여기에 an alternative, more elaborate answer입니다.

문제는 VS2012RC에서 수정되었습니다. 여기에 a corresponding connect issue에 대한 링크가 있습니다. 2008 년에 수정 된 C++ 표준 자체의 문제 였음을 알 수 있습니다.

+0

링크가 깨졌습니다. –

2

std :: vector 클래스는 template 매개 변수가 align (1)이어야한다고 봅니다. 일종의 빠른 색인 생성 가능성이 있습니다.