精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
服务方向
联系方式
锐英源精品原创,禁止转载和任何形式的非法内容使用,违者必究。点名“简易百科”和“闲暇巴”盗用锐英源原创内容。
transform语句使用时出error C7683: 无法创建对"void"的引用这个错误,但是明显transform里没有引用这一说啊,更没有void,所以错误难理解。其实这个引用是STL库内部代码的机制,STL管理容器数组,在容器数组内部的对象进行遍历时,是使用了引用。出错的代码如下:
wstring supper; WORD wrLen; WCHAR cTest[256]; transform(supper.begin(), supper.end(), std::back_inserter(cTest), toupper);
这里的容器是string,但是cTest不是string,所以引用也就做不成,就报错了。
因为STL报错是不会定位到错误代码上,是定位到STL代码里,VS2022里也是这样。所以新手很难查,因为自己加的代码,能够定位到上面部分,所以改成:
WCHAR cTest[256]; wstring supper,sTest=cTest; WORD wrLen; transform(supper.begin(), supper.end(), std::back_inserter(sTest), toupper);
按上面意思,原来想指针能够直接转换wstring,结果不能,自己转换后,再放到transform里,问题解决。问题原因是back_inserter里不能为指针,STL函数里要带STL对象,如果不是STL对象,就不是正规的容器项对象类型,就会报错。