使用 C++17 编译特征需要_SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING定义

Compiling Eigen with C++17 needs _SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING definition

本文关键字:NEGATORS CXX17 DEPRECATION WARNING 定义 SILENCE 使用 编译 特征 C++17      更新时间:2023-10-16

我正在尝试分配一个稀疏矩阵块,并且无法使其工作。似乎 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::not2((、std::unary_negate 和 std::binary_negate 在 C++17 中已弃用。它们被 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::not2((、std::unary_negate 和 std::binary_negate 在 C++17 中已弃用。它们被 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

相关文章:
  • 没有找到相关文章