我遇到了一个问题,即Eigen教程here中指示的逗号初始化似乎不起作用。
我有一个系统,其中有一个初始化 vector 的主要部分:
主要:
VectorXd v;
和一个功能:
double useVector(VectorXd &v) {
dataI = model_.find();
v << model_[dataI].v[0], model_[dataI].v[1], model_[dataI].v[2], 1;
return dataI;
}
注意:该函数的用法如下:
double distance = useVector(v);
现在
model_[dataI].v
是double[3]
,它肯定可以正常工作。我的理解是,这与此相同:VectorXd v;
v << 1, 2, 3,
4, 5, 6,
7, 8, 9;
但它不起作用,代码在函数的逗号初始化阶段出现段错误。
注意:虽然可以:
v.resize(4)
v[0] = model_[dataI].v[0];
v[1] = model_[dataI].v[1];
v[2] = model_[dataI].v[2];
v[3] = 1;
只要v像这样初始化:
VectorXd v(4);
这立即让我想知道调整大小的要点(但如果我将其取走,则会再次出现段错误)。
有人知道为什么会这样吗?
最佳答案
是的,在使用逗号初始化程序之前,必须将 vector v 调整为适当的大小。