Я пытаюсь создать вектор для D3DXMATRIXA16
следующим образом: vector<D3DXMATRIXA16> matrices;
и получаю ошибку:
d:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(717) :
ошибка C2719: '_Val': формальный параметр с __declspec (align ('16 ')) не будет выровнены
e:\projects\emuntitled\em\emscratch\emshadow.h(60) :
: см. ссылку на шаблон шаблона экземпляр 'std::vector < _Ty > ' скомпилированный с [ _Ty = D3DXMATRIXA16 ]
Почему это точно?
Спасибо за любую помощь!
Ответ 1
Это известная проблема, что stl:: vector не может содержать правильно выровненные данные, например D3DXMATRIXA16. Один плакат приколол основную причину (или, по крайней мере, один из них?): Объявление vector:: resize передает выровненные данные по значению, а не как константная ссылка.
В этой теме было предложено несколько обходных решений, причем самый безопасный из них - stl:: vector. Вы также можете сами исправить заголовки stl и перекомпилировать - на самом деле это может быть проще, чем кажется, но я не сделал этого сам.
EDIT: ссылки теперь сломаны (спасибо @David Menard), здесь альтернативный, более сложный ответ.
Проблема устранена в VS2012RC - здесь ссылка на на соответствующую проблему со связью. Оказывается, это была проблема в самом стандарте С++, исправленная в 2008 году.
Ответ 2
Похоже, класс std::vector требует, чтобы параметр шаблона был выровнен (1); вероятно, для какой-то быстрой индексации.