У меня есть класс, который находит выпуклую оболочку двумерного множества точек. Он содержит структуру, которая содержит 2 Eigen::Matrix<double, 2, 1>
. Похоже, что это (со многими вещами удалены):Собственный равнозначный массив assert
class Foo{
public:
Foo(Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>);
private:
struct edge{
unsigned int a;
unsigned int b;
Eigen::Matrix<double, 2, 1> slope;
double mag;
Eigen::Matrix<double, 2, 1> normal;
std::vector<unsigned int> list;
};
Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> points;
std::vector<edge> edges
};
Я получаю сообщение об ошибке утверждения при добавлении ребра к вектору edges
так:
void Foo::DoThing(){
edges.push_back(edge());
}
Точная ошибка:
Утверждение не выполнено: (reinterpret_cast (array) & 0xf) == 0 & & "здесь описано это утверждение:" "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalign edArrayAssert.html" "**** ПРОЧИТАЙТЕ ЭТУ WEB-СТРАНИЦУ !!! ****», файл \ ла \ л \ ла \ включает \ собственного \ о собственном Эйгене-dc6cfdf9bcec \ Эйгена \ SRC \ ядро \ densestorage.h, строка 86
Я пошел на веб-страницу и читать что мне нужно, чтобы добавить этот макрос: EIGEN_MAKE_ALIGNED_OPERATOR_NEW
, которые я добавил в структуры следующим образом:.
struct edge{
unsigned int a;
unsigned int b;
Eigen::Matrix<double, 2, 1> slope;
double mag;
Eigen::Matrix<double, 2, 1> normal;
std::vector<unsigned int> list;
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};
Но ошибка продолжает это происходит с VS 2013 и с Эйгеном версии 3.2.9 и тот же код неизмененные работы. отлично с версией 3.2.0. В Linux с GCC версии 5.3 он отлично работает с бета-сборкой Eigen. Что я делаю неправильно с этой более новой версией, чтобы вызвать эту проблему?
В чем разница между 'Eigen :: aligned_allocator' и 'Eigen :: aligned_allocator >' для этого примера? Причина, по которой я спрашиваю, - это код для производства без ошибок. –
Matt
Использование распределителя, сделанного для другого типа, звучит как что-либо * может произойти во время выполнения, я буду осторожен. – SpamBot