关于编译报错 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

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值