解决eclipse无法解析shared_ptr

今天心血来潮更新了一下机器上的ubuntu,装了14.04版本,原来是32位的,换成64的之后感觉是快了不少(加了内存)。因为不少软件没做备份,包括eclipse,所以只得重装,重装之后的麻烦事儿就是配置了。记得在ubuntu12那会儿,我装的eclipse c++版本是一开始没法解析c++的标准库文件,还得自己在项目中手动添加才行,就像pthread库也非得自己下载自己手动添加一样,挺麻烦的,那会儿还不大愿意用,虽然不是啥技术问题,但是当年还真是影响到了大片人。现在版本更新之后好像已经解决这个问题了,用着还挺顺手。

但是一个比较烦人的是g++带的库里memory头文件一直是不能直接提供shared_ptr你使用的,估计为了兼容不支持c++11的那拨,做了一些处理,想要使用还是得用tr1里的。因为我不大喜欢这个别扭的名字,所以一直琢磨着给整正常了(直接用memory里包含的版本)。


接着照着以前的做法,给项目属性里的Path and Symbol加上了

GXXEXPERIMENTALCXX0X

结果发现并未成功,一查新下载的g++的版本,得嘞,4.8.2,之前用的是4.7,想必是代码变了模样了,于是追到memory这儿一看:

#include <bits/stl_algobase.h>
#include <bits/allocator.h>
#include <bits/stl_construct.h>
#include <bits/stl_uninitialized.h>
#include <bits/stl_tempbuf.h>
#include <bits/stl_raw_storage_iter.h>

#if __cplusplus >= 201103L

include <exception> // std::exception

include <typeinfo> // std::type_info in get_deleter

include <iosfwd> // std::basic_ostream

include <ext/atomicity.h>

include <ext/concurrence.h>

include <bits/functexcept.h>

include <bits/stl_function.h> // std::less

include <bits/uses_allocator.h>

include <type_traits>

include <functional>

include <debug/debug.h>

include <bits/unique_ptr.h>

include <bits/shared_ptr.h>

if _GLIBCXX_USE_DEPRECATED

include <backward/auto_ptr.h>

endif

#else

include <backward/auto_ptr.h>

#endif

果然代码相较于4.7版本的变了模样,这里我们可以看到,根据条件编译命令所指示的信息,我们必须让__cplusplus宏的值大于等于201103L,于是再次回到

Project->Properties->C++ General->Pahts and Symbols->Symbols(选项卡)

增加_cplusplus Symbol然后设置值为201103L,重新编译项目之后即可使用memory提供的sharedptr.

后来逛stackoverflow(为什么没有约定俗称的中文名?比如栈溢出,打英文的很累呢!θ\(;¬_¬))发现也有不少人在问类似的问题,嗯。。这方面,Windows平台省不少事,话说平胸而论,cl在windows上(或者说visual studio上)对c/c++的支持灵活很多,管它其他的呢,我用着舒坦啊,但是,我还是很爱Linux平台的(〝▼皿▼) 。

原文地址:https://www.cnblogs.com/imjch/p/3902937.html