2015-07-20 2 views
-2

Я должен создать std::vector содержащий векторы Eigen::Vector2d. Это, как я делаю заявление:C++ "вектор векторов"

std::vector< std::vector<Eigen::Vector2d> > markingsPointSets; 

и я стараюсь отодвинуть некоторые элементы я создал так:

Eigen::Vector2d firstMarkingPoint(markingPointA[0] + AB_perp[0] * .15, markingPointA[1] + AB_perp[1] * .15); // Don't mind to the value of this variable :p 

markingsPointSets.at(i).push_back(firstMarkingPoint); 

, но это дает мне:

error c2719 formal parameter with __declspec(align('16')) won't be aligned 

Скажите, пожалуйста, если есть недостающая информация, чтобы найти источник этой проблемы.

+0

Добро пожаловать в StackOverflow. Просто дикая догадка, но объявляется 'Vector2d' с определенными настройками выравнивания, которые могут быть не гарантированы при вводе его в' std :: vector'? –

+0

См. [Этот вопрос] (http://stackoverflow.com/questions/25300116/directxxmmatrix-error-c2719-declspecalign16-wont-be-aligned). –

ответ

2

Вы, наверное, не читали documentation:

Использование STL контейнеров на фиксированного размера распараллеливаемые типов Эйген, или классы, имеющие члены таких типов, требует принятия следующих двух шагов:

  • Должен использоваться 16-байтовый распределитель. Eigen предоставляет один готовый к использованию: aligned_allocator.

  • Если вы хотите использовать std::vector контейнер, вам нужно #include < Эйген/StdVector>.

Эти проблемы возникают только с фиксированного размера распараллеливаемые типов собственных и структур, имеющих такие объекты, как Эйген элемента. Для других типов Eigen, таких как Vector3f или MatrixXd, при использовании контейнеров STL особого ухода не требуется.

(курсив мой)

Смежные вопросы