c++ - 用 C++17 编译 Eigen 需要 _SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING 定义
问题描述
我正在尝试分配一个稀疏矩阵块并且无法使其工作。似乎不推荐使用 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:
提前致谢!
解决方案
这里有两个非常不同的问题。首先,您应该在 C++14 模式下编译或_SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING
按要求定义。
其次,该行m.block(0, 0, 2, 2) << 1, 2, 3, 4;
对 a 无效SparseMatrix
。我不知道你想要实现什么,但除非你真的知道你在做什么(即你的代码在内存重新分配和重新复制方面意味着什么),你应该坚持SparseMatrix
通过三元组列表组装一个由doc推荐。
推荐阅读
- vscode-settings - CodeRunner 不在 VS 上显示 JS 输出
- perl - Perl 脚本删除换行符并将下一行数据移动到上一行
- android - 如何添加在其他应用程序中显示的功能
- javascript - 如何避免 React.js 中的这种无限更新循环?
- python - 如何根据另一个表中的数据过滤一个表
- java - 如何在 Android Studio 中修复我的旧应用程序?
- python - Tkinter 中 Canvas 的 tag_bind 方法
- python - TypeError:列表索引必须是整数或切片,而不是 str - Python 代码错误
- python - 遍历数组的最佳实现是什么?
- java - 直接在 IntelliJ IDEA 中运行时,Spring Webflow 在 Spring Boot 应用程序中找不到资源文件夹