Sophus/test/core/test_so2.cpp:99:25: error: implicitly-declared ‘Eigen::Map<Sophus::SO2<float>, 0, Eigen::Stride<0, 0> >::Map(const Eigen::Map<Sophus::SO2<float>, 0, Eigen::Stride<0, 0> >&)’ is deprecated [-Werror=deprecated-copy]怎么解决
时间: 2023-08-06 18:09:34 浏览: 71
这个错误是因为你使用了已经过时的拷贝构造函数,可以通过以下两种方式解决:
1. 显式声明拷贝构造函数,并在其中使用新的拷贝构造函数:
```cpp
Map(const Map& other)
: Base(other.data(), other.length())
{}
```
2. 使用新的拷贝构造函数:
```cpp
Map(const Map& other) = default;
```
推荐使用第二种方式,因为这样可以利用默认的拷贝构造函数,减少代码量。
相关问题
/Examples/ROS/ORB_SLAM3/../../../Thirdparty/Sophus/sophus/so2.hpp:12:10: fatal error: Eigen/LU: 没有那个文件或目录 #include <Eigen/LU> ^~~~~~~~~~
这个错误是因为在你的代码中使用了Sophus库,而Sophus库又依赖于Eigen库。你需要确保你的代码中包含Eigen库的头文件,并且Eigen库已经正确安装。如果你使用的是Ubuntu系统,可以通过以下命令安装Eigen库:
```
sudo apt-get install libeigen3-dev
```
如果你使用的是其他操作系统,可以到Eigen官网上下载并安装:http://eigen.tuxfamily.org/index.php?title=Main_Page
安装完成后,确保你的代码中包含如下头文件:
```c++
#include <Eigen/Core>
#include <Eigen/Dense>
```
如果还出现相同的错误,请确保你的头文件路径设置正确,并且Sophus库能够正确链接Eigen库。
error: redefinition of 鈥榮truct eigen::internal::traits<eigen::map<sophus::s
这个错误信息是因为在代码中对结构体 'struct eigen::internal::traits<eigen::map<sophus::s' 进行了重定义。重定义指的是在代码中多次定义了相同名称的结构体,这是不允许的。
要解决这个问题,可以按照以下几个步骤进行操作:
1. 检查代码中是否存在重复定义的结构体。在整个代码文件中搜索该结构体的定义,并确保只有一个定义存在。
2. 如果找到多个重复定义的结构体,需要删除其中一个。通常,应该保留对应的正确定义,并删除其他的冗余定义。
3. 如果在不同的头文件中都包含了相同的结构体定义,可以尝试使用预处理器指令来避免重定义。例如,可以使用条件编译指令 `#ifndef` 和 `#endif` 来包裹结构体的定义,确保每个头文件只包含一次。
4. 检查是否存在头文件未正确包含的情况。在使用结构体之前,确保已经包含了包含该结构体定义的头文件。
5. 如果以上步骤都没有解决问题,可能需要检查代码中其他地方的错误,以确定是否与该结构体定义重定义相关的其他错误一起出现了。
需要注意的是,代码中的错误信息可能不止一处,因此可能需要重复进行上述步骤,直到解决所有的重定义错误。建议在修改代码之前进行备份,以防出现更严重的问题。