gpt4 book ai didi

c++ - 特征矩阵的大括号初始化

转载 作者:行者123 更新时间:2023-12-05 09:26:42 25 4
gpt4 key购买 nike

使用 gcc 9.4.0 和 Eigen 3.3.7,以下编译没有问题:

#include <Eigen/Dense>

int main(int Argc, char *Argv[]) {
Eigen::Matrix<int, 1, 4> d = {1, 2, 3, 4};
}

将长度增加 1 会引发错误:

#include <Eigen/Dense>

int main(int Argc, char *Argv[]) {
Eigen::Matrix<int, 1, 5> d = {1, 2, 3, 4, 5};
}

foo.cpp:6:48: error: could not convert ‘{1, 2, 3, 4, 5}’ from ‘<brace-enclosed initializer list>’ to ‘Eigen::Matrix<int, 1, 5>’
6 | Eigen::Matrix<int, 1, 5> d = {1, 2, 3, 4, 5};
| ^
| |
| <brace-enclosed initializer list>

第二种情况是 Eigen 教程页面中一行的拷贝。

有人可以解释第二种情况的问题吗?

更新:根据下面的评论,这似乎是 Eigen 库中的错误。我已提交错误报告。

更新更新:根据下面的回答,Eigen 3.3 特别允许大括号初始值设定项最多 4 个参数,而 Eigen 3.4 允许一般大括号初始化。 Mint 发行版是 3.3(3.4 发布一年后!),而 Eigen 文档现在指的是 3.4 版本。

最佳答案

Eigen 3.3.x 不支持大括号初始化。如果你写

Eigen::Matrix<int, 1, 4> d = {1, 2, 3, 4};

它将调用Eigen::Matrix(S const& x, S const& y, S const& z, S const& w)构造函数link . Eigen 具有最多 4 个元素的构造函数,仅适用于在编译时具有正确元素数量的类 vector 矩阵。

如果启用了 C++11 或更高版本,则初始化器列表可与 Eigen 3.4.x 一起使用:link .

关于c++ - 特征矩阵的大括号初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73448417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com