2

我有一个问题,这里的 Eigen 教程中指示的逗号初始化似乎不起作用。

我有一个系统,其中有一个初始化向量的主要部分:

主要的:

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);

这立即让我想知道调整大小的意义(但如果我把它拿走,那么它会再次出现段错误)。

有谁知道为什么会这样?

4

1 回答 1

2

是的,在使用逗号初始值设定项之前,必须将向量 v调整为适当的大小。

于 2013-01-07T09:18:11.173 回答