Ошибка, которую вы получаете, связана с тем, что компилятор не распознает ключевое слово nullptr
. Это связано с тем, что nullptr
был представлен в более поздней версии Visual Studio, чем та, которую вы используете.
Есть два способа заставить это работать в более старой версии. Одна идея взята из книги Скотта Мейерса по С++, где он предлагает создать заголовок с классом, который эмулирует 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 (#define NULL ((void *)0)
), где вы создаете макрос для NULL
следующим образом:
#define NULL 0
if(data == NULL){
}
Обратите внимание, что это не совсем то же самое, что и NULL
, найденное в C, для более подробного обсуждения этого вопроса см. этот вопрос: Почему указатели NULL определены по-разному в C и C++?
Недостатком этого является то, что вам нужно изменить исходный код, и он не является типобезопасным, как nullptr
. Так что используйте это с осторожностью, если вы не будете осторожны, это может привести к некоторым незаметным ошибкам, и именно эти незаметные ошибки мотивировали разработку nullptr
в первую очередь.
person
shuttle87
schedule
26.06.2014
nullptr
— это новая функция языка, и похоже, что ваш компилятор просто не поддерживает ее. Раньше это делалось для проверки на 0, но это не совсем безопасно для типов. Также вы можете прочитать это en.wikibooks.org/wiki/More_C%2B %2B_Idioms/nullptr - person shuttle87   schedule 26.06.2014nullptr
только в Visual Studio 2010 и новее, это функция C++11. - person Cory Kramer   schedule 26.06.2014nullptr
. Вы знаете, что решение состоит в том, чтобы использовать более новый компилятор. И все же вы хотите как-то найти способ изменить компилятор, не меняя компилятор. - person David Heffernan   schedule 26.06.2014