错误 C2719:'_Val':带有 __declspec(align('16')) 的形式参数不会对齐?

发布于 2024-08-01 17:59:09 字数 594 浏览 4 评论 0原文

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

<前><代码> 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 ]

到底为什么会这样呢?

谢谢你的帮助!

I'm trying to create a vector for D3DXMATRIXA16 like so: vector<D3DXMATRIXA16> matrices; and am getting the error:

     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
]

Why is that exactly?

Thanks for any help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

糖粟与秋泊 2024-08-08 17:59:09

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

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

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

It is a known issue [link dead] that stl::vector cannot properly contain aligned data, such as D3DXMATRIXA16. One poster pinned the root cause (or at least, one of them?): the declaration of vector::resize passes the aligned data by value, and not as const reference.
Several workarounds were suggested in that thread, the safest being dropping stl::vector altogether. You might also want to fix the stl headers yourself and recompile - this actually may be easier than it sounds, but I haven't done so myself.

EDIT: links are now broken (thanks @David Menard), here's an alternative, more elaborate answer.

The issue is fixed in VS2012RC - here's a link to a corresponding connect issue [link dead]. Turns out it was actually an issue in the C++ standard itself, fixed in 2008.

一百个冬季 2024-08-08 17:59:09

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

It looks like the std::vector class requires the template parameter to be align(1); likely for some sort of fast indexing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文