错误C2719:'_ VAL':带__declspec(align('16'))的形式参数将不对齐?

时间:2009-08-15 07:52:38

标签: c++ vector directx matrix alignment

我正在尝试为D3DXMATRIXA16创建一个向量,如下所示:vector<D3DXMATRIXA16> matrices;并收到错误:

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

错误C2719:'_ VAL':形式参数   与__declspec(对齐('16'))将不会   对准

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

:参见类模板的引用   实例化'std :: vector&lt; _Ty&gt;'存在   编译           同           [               _Ty = D3DXMATRIXA16           ]

为什么会这样?

感谢您的帮助!

2 个答案:

答案 0 :(得分:15)

这是known issue [链接死],stl :: vector无法正确包含对齐的数据,例如D3DXMATRIXA16。一张海报固定了根本原因(或者至少是其中一个?):vector :: resize的声明按值传递对齐的数据,而不是const引用。 在该线程中提出了几种解决方法,最安全的是完全删除stl :: vector 。您可能还想自己修复stl标头并重新编译 - 这实际上可能比听起来更容易,但我自己也没有这样做过。

编辑:链接现已被破坏(感谢@David Menard),这里是an alternative, more elaborate answer

问题已在VS2012RC中修复 - 这是指向a corresponding connect issue [link dead]的链接。事实证明,它实际上是C ++标准本身的一个问题,已于2008年修复。

答案 1 :(得分:2)

看起来std :: vector类需要模板参数对齐(1);可能是某种快速索引。