我试图设置一个稀疏矩阵块,然后让它运行起来。似乎eigen使用的函数已被弃用,我可以用一些定义修复它。但是,无论我是否应该将这些定义添加到项目中或等待更新版本的Eigen,我都会使用。你们可以就定义的副作用提出建议吗?
我写的程序看起来像这样
#include <Eigen/Sparse>
int main()
{
Eigen::SparseMatrix<double> m(4, 4);
m.block(0, 0, 2, 2) << 1, 2, 3, 4;
}
这是警告:
1> d:\ eigen_3.3.4 \ eigen \ src \ core \ functors \ stlfunctors.h(87):错误C4996:'std :: unary_negate <_Fn>':警告STL4008:std :: not1(),std ::在C ++ 17中不推荐使用not2(),std :: unary_negate和std :: binary_negate。它们被std :: not_fn()取代。您可以定义_SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING或_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS以确认您已收到此警告。 1> d:\ eigen_3.3.4 \ eigen \ src \ core \ functors \ stlfunctors.h(91):错误C4996:'std :: binary_negate <_Fn>':警告STL4008:std :: not1(),std ::在C ++ 17中不推荐使用not2(),std :: unary_negate和std :: binary_negate。它们被std :: not_fn()取代。您可以定义_SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING或_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS以确认您已收到此警告。 1> d:\ sandbox \ sandbox.cpp(25):错误C2678:二进制'<<':找不到带有'Eigen :: Block'类型左手操作数的运算符(或者没有可接受的转换)1 > 1> [1> Derived = Eigen :: SparseMatrix 1>
提前致谢!
这里有两个非常不同的问题。首先,您应该在C ++ 14模式下编译或者按照说明定义_SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING
。
其次,m.block(0, 0, 2, 2) << 1, 2, 3, 4;
线对SparseMatrix
无效。我不知道你想要实现什么,但除非你真的知道你在做什么(即你的代码在内存重新分配和重新复制方面意味着什么),你应该坚持通过三元组列表组装一个SparseMatrix
按照doc的建议。