Ошибка компиляции ‘nullptr’ необъявленный идентификатор

Я пытаюсь скомпилировать исходники с Visual Studio 2008 Express, но я получаю эту ошибку:

Error C2065: 'nullptr' undeclared identifier.

Мой код:

if (Data == nullptr)
{
show("Data is null");
return 0;
}

Я прочитал в Google, что мне нужно перейти на Visual Studio 2010, но я не хочу этого делать из-за intelisense 2008 года. Это можно починить или заменить?

4

Решение

Вы получаете ошибку, потому что компилятор не распознает nullptr ключевое слово. Это потому что nullptr была представлена ​​в более поздней версии Visual Studio, чем та, которую вы используете.

Есть два способа заставить это работать в старой версии. Одна идея пришла из книги Скотта Мейерса 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, для дальнейшего обсуждения см. этот вопрос: Почему указатели NULL по-разному определяются в C и C ++?

Недостатками этого является то, что вы должны изменить исходный код, и он не является безопасным nullptr, Так что используйте это с осторожностью, это может привести к некоторым тонким ошибкам, если вы не будете осторожны, и именно эти тонкие ошибки мотивировали развитие nullptr на первом месте.

7

Другие решения

nullptr является частью C ++ 11, в C ++ 03 вы просто используете 0:

if (!Data)
5

По вопросам рекламы [email protected]