用C ++ 17编译Eigen需要_SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING定义

问题描述 投票:4回答:1

我试图设置一个稀疏矩阵块,然后让它运行起来。似乎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++ c++17 eigen
1个回答
4
投票

这里有两个非常不同的问题。首先,您应该在C ++ 14模式下编译或者按照说明定义_SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING

其次,m.block(0, 0, 2, 2) << 1, 2, 3, 4;线对SparseMatrix无效。我不知道你想要实现什么,但除非你真的知道你在做什么(即你的代码在内存重新分配和重新复制方面意味着什么),你应该坚持通过三元组列表组装一个SparseMatrix按照doc的建议。

© www.soinside.com 2019 - 2024. All rights reserved.