【发布时间】:2016-08-10 20:59:01
【问题描述】:
我有一个类可以找到一组 2D 点的凸包。它包含一个内部有 2 个 Eigen::Matrix<double, 2, 1> 的结构。它看起来像这样(删除了很多东西):
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" " **** 阅读此网页!!! ****“, 文件 \blah\blah\blah\includes\eigen\eigen-eigen-dc6cfdf9bcec\eigen\src\core\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 和 Eigen 版本 3.2.9 中。未修改的相同代码适用于版本 3.2.0。在具有 GCC 版本 5.3 的 linux 上,它适用于 Eigen 的 beta 版本。我对这个新版本做错了什么导致这个问题?
【问题讨论】: