10

我正在尝试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) :

:参见使用 [ _Ty=D3DXMATRIXA16 ] 编译的类模板实例化 'std::vector<_Ty>' 的参考

为什么会这样?

谢谢你的帮助!

4

2 回答 2

15

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

编辑:链接现在已损坏(感谢@David Menard),这是一个替代的,更详细的答案

该问题已在 VS2012RC 中修复 - 这是对应连接问题的链接 [链接失效]。事实证明,这实际上是 C++ 标准本身的一个问题,于 2008 年修复。

于 2010-02-26T09:57:22.720 回答
2

看起来 std::vector 类需要模板参数为 align(1); 可能用于某种快速索引。

于 2009-08-17T15:34:45.933 回答