关于编译报错 error: cannot convert 'const std::__cxx11::basic_string' to 'const char*' 的处理

所以然

目前c++11标准开始普及,大家都开始默认支持或者使用c++11,例如GCC 5就开始默认启用C++11特性。但是由于c++11相对于c++03,很多实现的数据结构都发生了改变,所以两者并不能完全混用。
默认情况下,GCC 5在编译时会将std::string类型按c++11下std::__cxx11::basic_string 来处理,这时如果你调用的库在编译时未启用c++11特性则其中的std::string实际上是**std::basic_string*** ,这时如果将c++11下的string当作参数传入非c++11的库时,就会出现 error: cannot convert ‘const std::__cxx11::basic_string’ to 'const char ,或者未定义的方法引用(undefined reference)。

所以解决这个问题/类似问题的根本方法就是在编译时不要混用c++11和c++03库/代码。

如果你是在GCC5下使用了非GCC5编译的库,或者编译时关闭了c++11特性的库,那么在编译你的代码时请相应的关闭C++11特性:

1、 0x01 编译选项中预定义宏

-D_GLIBCXX_USE_CXX11_ABI=0

2、 0x02 代码中定义宏

#define _GLIBCXX_USE_CXX11_ABI 0

3、 0x03 通过其他方法定义 _GLIBCXX_USE_CXX11_ABI 宏的值为0
例如Qt中可以在Pro文件中添加:

DEFINES += _GLIBCXX_USE_CXX11_ABI=0

你可能感兴趣的:(视觉SLAM)