2009-08-15 11 views
9

Próbuję utworzyć wektor dla D3DXMATRIXA16 tak: vector<D3DXMATRIXA16> matrices; i otrzymuję błąd:error C2719: '_Val': formalny parametr z __declspec (wyrównanie ('16 ')) nie zostanie wyrównany?

 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 ]

dlaczego tak jest dokładnie?

Dzięki za pomoc!

+0

Czy umieścisz kod w miejscu, w którym go używasz? – Tchami

Odpowiedz

14

Jest to known issue, że wektor stl :: vector nie może poprawnie zawierać wyrównanych danych, takich jak D3DXMATRIXA16. Jeden plakat pinned the root cause (a przynajmniej jeden z nich?): Deklaracja wektora :: resize przekazuje wyrównane dane według wartości, a nie jako odniesienie do stałych. W tym wątku zasugerowano kilka obejść, najbezpieczniejszym jest upuszczenie stl :: vector altogether. Możesz również samemu naprawić nagłówki stl i przekompilować - to może być łatwiejsze niż się wydaje, ale sam tego nie zrobiłem.

EDYCJA: linki są teraz uszkodzone (dzięki @David Menard), oto an alternative, more elaborate answer.

Problem został rozwiązany w VS2012RC - tutaj znajduje się link do a corresponding connect issue. Okazuje się, że był to problem w samym standardzie C++, który został naprawiony w roku 2008.

+0

linki są zepsute –

2

Wygląda na to, że klasa std :: vector wymaga wyrównania parametru szablonu (1); prawdopodobnie w przypadku pewnego szybkiego indeksowania.