2009-08-15 11 views
9

Je suis en train de créer un vecteur pour D3DXMATRIXA16 comme ceci: vector<D3DXMATRIXA16> matrices; et je reçois l'erreur:erreur C2719: '_Val': paramètre formel avec __declspec (align ('16 ')) ne sera pas aligné?

 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 ]

Pourquoi est-ce exactement?

Merci pour toute aide!

+0

Pouvez-vous poster le code où vous l'utilisez? – Tchami

Répondre

14

C'est un known issue que stl :: vector ne peut pas contenir correctement des données alignées, telles que D3DXMATRIXA16. Une affiche pinned the root cause (ou au moins, l'un d'eux?): La déclaration de vector :: resize passe les données alignées par valeur, et non comme référence const. Plusieurs solutions de contournement ont été suggérées dans ce thread, la plus sûre étant en supprimant stl :: vector tout à fait. Vous pourriez aussi vouloir corriger vous-même les en-têtes de stl et les recompiler - cela peut être plus facile que ça en a l'air, mais je ne l'ai pas fait moi-même.

EDIT: les liens sont maintenant rompus (merci @David Menard), voici an alternative, more elaborate answer.

Le problème est résolu dans VS2012RC - voici un lien vers a corresponding connect issue. Il s'avère que c'était en fait un problème dans le standard C++ lui-même, corrigé en 2008.

+0

les liens sont rompus –

2

Il semble que la classe std :: vector nécessite que le paramètre template soit aligné (1); probablement pour une sorte d'indexation rapide.