前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决std::addressof找不到及eclipse lunna+cdt 8.6.0 支持 c++11的设置

解决std::addressof找不到及eclipse lunna+cdt 8.6.0 支持 c++11的设置

作者头像
10km
发布2022-05-07 10:00:55
6580
发布2022-05-07 10:00:55
举报
文章被收录于专栏:10km的专栏

最近在eclipse下写c++代码,当用到std::addressof时,eclipse报错,说是无法解析这个函数:

错误信息:Function 'addressof' could not be resolved
错误信息:Function 'addressof' could not be resolved

但带两个下划线前缀的同名函数std::__addressof却是可以用的,而且使用std::addressof时也能正常命令行编译,不会报错 本来打算就这么将就用吧,不想去进一步搞清楚原因了,除了那红字看着不爽,没别的影响。 但是代码在vs2010下编译时又出错了,说是找不到 std::__addressof这个方法,但是可以是可以找到addressof, 这可有点麻烦了,仔细研究了一下,原来addressof是纳入c++11标准中的函数,c++11以前的标准对addressof的实现名称没有统一规定,所以各个编译器的名字不尽相同, 对于gcc(5.2.0),头文件include/c++/bits/move.h中虽然同时定义了std::addressof和std::__addressof, 但在move.h中通过对__cplusplus宏变量的判断来决定是否定义std::addressof函数,如果__cplusplus小于201103L(c++11标准的版本号),就不会定义std::addressof函数,

这里写图片描述
这里写图片描述

默认安装的cdt8.6.0,__cplusplus的定义是199711L,所以就没有定义std::addressof函数。 如下图:eclipse内置编译器的预定义宏变量

这里写图片描述
这里写图片描述

我用的mingw版本是支持c++11标准的,而且CMakeList.txt中也特意加入了c++11支持的选项,如下:

代码语言:javascript
复制
#判断编译器类型,如果是gcc编译器,则在编译选项中加入c++11支持    
if(CMAKE_COMPILER_IS_GNUCXX) 
    add_definitions("-std=c++11")
    message(STATUS "optional:-std=c++11")   
endif(CMAKE_COMPILER_IS_GNUCXX)

所以使用std::addressof方法时命令行编译是可以正常通过的,但是eclipse IDE内置的编译器(CDT Built-in compiler)默认的设置中仍然没有支持c++11的选项,所以eclipse IDE环境下使用std::addressof会报错。 所以现在的问题就变成了如何让eclipse内置编译器也支持c++11, 在网上看了一些资料,主要的办法就是修改eclipse的内置编译器的设置, 步骤1: 打开菜单: Window -> Preferences -> C/C++ -> Build -> Settings -> Discovery -> CDT GCC Build-in Compiler Settings 添加-std=c++11

这里写图片描述
这里写图片描述

步骤2: Properties -> C/C++ General -> Preprocessor Include Paths, Marcos etc. -> Providers 勾选 CDT GCC Build-in Compiler Settings 并将之设置为最优先(移到最顶端)

这里写图片描述
这里写图片描述

上面两步,也可以改为将CDT GCC Build-in Compiler Settings MinGW添加c++11支持,并在第二步中使用CDT GCC Build-in Compiler Settings MinGW,效果是一样的

步骤3: 菜单里面选择 Project ->C/C++ Index 重建索引(Rebuild), 然后错误消失,Build-in Compiler就正确支持c++ 11了。 这时你再打开move.h头文件,会发现__cplusplus的值已经是201103L了

这里写图片描述
这里写图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-10-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档