gcc 5.1.0编译C++代码报错'to_wstring'不是'std'成员如何解决?
'std::to_wstring' 编译错误排查解决方法
std::to_wstring 是C++11版本才新增的标准库接口,你遇到的报错在gcc 5.1+CodeBlocks环境下通常由以下几个原因导致,按优先级排查即可:
1. 未开启C++11及更高版本编译标准
gcc 5.1默认使用C98标准编译代码,原生不支持C11新增的接口,需要手动开启编译选项:
- 打开CodeBlocks顶部菜单栏
Settings->Compiler - 在编译器设置窗口的
Compiler settings标签下,切换到Compiler flags选项卡 - 勾选
Have g++ follow the C++11 ISO C++ language standard [-std=c++11](对性能或新特性有要求也可以选择C++14/17对应的选项) - 保存设置后重新编译项目
如果你使用手动编写的Makefile编译,直接在g++编译参数中添加-std=c++11即可。
2. 未正确引入头文件
std::to_wstring 定义在C++标准字符串头文件中,需要确保你的代码顶部包含如下引入语句:
#include <string>
注意不要混淆为<cstring>或<string.h>,这两个是C风格字符串操作的头文件,不包含C++std::wstring及相关转换接口。
3. MinGW标准库宽字符支持缺陷
如果你使用的是Windows平台下的旧版MinGW发行版,部分版本的libstdc++对宽字符接口的适配存在缺陷,完成前两步仍然报错可以选择以下方案:
- 升级gcc到5.4以上版本,或者更换为MinGW-w64发行版
- 临时实现自定义转换接口替代标准库实现,代码示例如下:
#include <sstream> template<typename T> std::wstring to_wstring(const T& val) { std::wostringstream woss; woss << val; return woss.str(); }
使用时直接调用自定义的to_wstring即可兼容旧编译环境。
内容的提问来源于stack exchange,提问作者Praveen Kumar Sirohiwal
相关产品推荐
相关产品推荐

