您收到的错误是因为编译器无法识别nullptr
关键词。这是因为nullptr
是在比您正在使用的版本更高版本的 Visual Studio 中引入的。
您可以通过两种方法让它在旧版本中运行。一个想法来自 Scott Meyers c++ 书,他建议使用一个模拟类创建一个标头nullptr
像这样:
const // It is a const object...
class nullptr_t
{
public:
template<class T>
inline operator T*() const // convertible to any type of null non-member pointer...
{ return 0; }
template<class C, class T>
inline operator T C::*() const // or any type of null member pointer...
{ return 0; }
private:
void operator&() const; // Can't take address of nullptr
} nullptr = {};
这样你只需要根据msvc的版本有条件地包含该文件
#if _MSC_VER < 1600 //MSVC version <8
#include "nullptr_emulation.h"
#endif
这样做的优点是使用相同的关键字,并使升级到新的编译器变得更加容易(如果可以的话,请升级)。如果您现在使用较新的编译器进行编译,那么您的自定义代码根本不会被使用,并且您仅使用 c++ 语言,我觉得这对于未来很重要。
如果您不想采用这种方法,您可以使用模拟旧 C 风格方法的方法(#define NULL ((void *)0)
)在那里你为NULL
像这样:
#define NULL 0
if(data == NULL){
}
请注意,这与NULL
如 C 中所示,有关更多讨论,请参阅此问题:为什么 C 和 C++ 中 NULL 指针的定义不同? https://stackoverflow.com/questions/7016861/why-are-null-pointers-defined-differently-in-c-and-c
这样做的缺点是您必须更改源代码,并且它不像nullptr
。因此请谨慎使用,如果你不小心,它可能会引入一些微妙的错误,正是这些微妙的错误推动了开发nullptr
首先。