SLAM14讲CH6代码运行报错记录:/usr/local/include/g2o/core/matrix_structure.h:58:19: error: ‘std::string_view’ h

记录一下在运行ch6程序时的报错问题:
报错如下:

/usr/local/include/g2o/core/matrix_structure.h:58:19: error: ‘std::string_view’ has not been declared
   58 |   bool write(std::string_view filename) const;
      |                   ^~~~~~~~~~~
/home/zwm/slambook2/ch6/g2oCurveFitting.cpp: In member function ‘virtual bool CurveFittingVertex::read(std::istream&):
/home/zwm/slambook2/ch6/g2oCurveFitting.cpp:34:35: warning: no return statement in function returning non-void [-Wreturn-type]
   34 |   virtual bool read(istream &in) {}
      |                                   ^
/home/zwm/slambook2/ch6/g2oCurveFitting.cpp: In member function ‘virtual bool CurveFittingVertex::write(std::ostream&) const:
/home/zwm/slambook2/ch6/g2oCurveFitting.cpp:36:43: warning: no return statement in function returning non-void [-Wreturn-type]
   36 |   virtual bool write(ostream &out) const {}
      |                                           ^
/home/zwm/slambook2/ch6/g2oCurveFitting.cpp: In member function ‘virtual bool CurveFittingEdge::read(std::istream&):
/home/zwm/slambook2/ch6/g2oCurveFitting.cpp:63:35: warning: no return statement in function returning non-void [-Wreturn-type]
   63 |   virtual bool read(istream &in) {}
      |                                   ^
/home/zwm/slambook2/ch6/g2oCurveFitting.cpp: In member function ‘virtual bool CurveFittingEdge::write(std::ostream&) const:
/home/zwm/slambook2/ch6/g2oCurveFitting.cpp:65:43: warning: no return statement in function returning non-void [-Wreturn-type]
   65 |   virtual bool write(ostream &out) const {}
      |                                           ^
make[2]: *** [CMakeFiles/g2oCurveFitting.dir/build.make:63:CMakeFiles/g2oCurveFitting.dir/g2oCurveFitting.cpp.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:80:CMakeFiles/g2oCurveFitting.dir/all] 错误 2
make: *** [Makefile:84:all] 错误 2

错误原因:
这个错误通常是由于编译器不支持 C++17 标准或者编译器选项没有正确设置导致的。
std::string_view 是 C++17 中引入的一种轻量级的字符串类型,用于表示不拥有字符序列的字符串,它通常被用于参数传递和字符串操作中,可以有效地减少内存分配和拷贝操作。

解决方案:
①修改c++标准,这里可以参考(理论上是可以的,但是不知道为什么这里我没有成功)
https://blog.csdn.net/jianjianshini/article/details/127888460?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168069218816800180671233%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168069218816800180671233&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_ecpm_v1~rank_v31_ecpm-1-127888460-null-null.blog_rank_default&utm_term=std&spm=1018.2226.3001.4450
②把std::string_view换成std::string
因为std::string_view 通常用于在不需要对字符串进行修改的情况下对字符串进行操作,并且它可以提高程序的性能。而 std::string 则适用于需要对字符串进行修改或者需要将字符串传递给需要拥有字符串的所有权的函数时,这里好像用后者也行。
具体改动如下:
在/usr/local/include/g2o/core/matrix_structure.h中
首先加入

#include <string>

其次把

bool write(std::string_view filename) const;

改成

bool write(std::string filename) const;

运行如下:

~/slambook2/ch6/build$ ./g2oCurveFitting 
start optimization
iteration= 0     chi2= 376795.438690     time= 2.7055e-05        cumTime= 2.7055e-05     edges= 100      schur= 0        lambda= 21.496593       levenbergIter= 1
iteration= 1     chi2= 35680.668987      time= 1.7857e-05        cumTime= 4.4912e-05     edges= 100      schur= 0        lambda= 10.024449       levenbergIter= 1
iteration= 2     chi2= 2199.597326       time= 1.7095e-05        cumTime= 6.2007e-05     edges= 100      schur= 0        lambda= 3.341483        levenbergIter= 1
iteration= 3     chi2= 178.624646        time= 1.7586e-05        cumTime= 7.9593e-05     edges= 100      schur= 0        lambda= 1.113828        levenbergIter= 1
iteration= 4     chi2= 103.241076        time= 1.7177e-05        cumTime= 9.677e-05      edges= 100      schur= 0        lambda= 0.371276        levenbergIter= 1
iteration= 5     chi2= 101.938412        time= 1.8229e-05        cumTime= 0.000114999    edges= 100      schur= 0        lambda= 0.123759        levenbergIter= 1
iteration= 6     chi2= 101.937020        time= 1.7855e-05        cumTime= 0.000132854    edges= 100      schur= 0        lambda= 0.082506        levenbergIter= 1
iteration= 7     chi2= 101.937020        time= 1.7241e-05        cumTime= 0.000150095    edges= 100      schur= 0        lambda= 0.055004        levenbergIter= 1
iteration= 8     chi2= 101.937020        time= 1.7336e-05        cumTime= 0.000167431    edges= 100      schur= 0        lambda= 0.036669        levenbergIter= 1
iteration= 9     chi2= 101.937020        time= 1.6944e-05        cumTime= 0.000184375    edges= 100      schur= 0        lambda= 0.024446        levenbergIter= 1
solve time cost = 0.000580655 seconds. 
estimated model: 0.890912   2.1719 0.943629
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值