谈一谈null在C和C++中的区别:
C中NULL是指向0地址的指针常量(void *)0
C++中则是定义为整数0.
nullptr是C++11引入的新特性,解决C和C++中NULL的定义不一致所带来的编译器兼容问题。
出现错误error: 'nullptr' was not declared in this scope,说明你的编译器没有支持C++11,至少没有完整支持C++11。
问题清楚,下面解决这个问题有两个方向:
1.设置编译器或升级编译器到gcc4.8.1,完全支持C++11
查看你的gcc版本指令:gcc -v

如果你的gcc编译器部分支持C++11,你可以添加编译选项开启支持C++11。4.4.7以上可以这样开启:g++ -std=c++0x wo.cpp
加上编译选项-std=c++0x就可以了。如果不设置这个选项,auto特性就不支持。但是即使设置了这个选项,nullptr还是不支持。如果你的代码有 大量的C++11特性,那就建议升级gcc编译器到4.8.1版本。gcc4.8.1以上开启C++11支持是这样的:
g++ -std=c++0x wo.cpp
安装gcc4.8.1可以参考其他文章。
2.改代码,不要使用C++11特性
如果你的代码只有几处C++特性的代码,那就没有必要去折腾编译器了。我这里就是nullptr,也就几个地方使用了。升级编译器还是有点费事,况且新手的话,很容易搞出问题,到时候连正常的编译都成了问题。
我们只要将C++11特性的代码等价替换为旧标准C++代码即可。nullptr是C++11引入的,表示空指针。那么我们以前的空指针要么使用宏NULL表示,要么直接使用0表示。所以,我们只要将nullptr替换为0或NULL就搞定了。

网友评论