2015-02-10 2 views
3

Я изучаю единственный экземпляр сейчас (в C++), и я попробовал следующий код в моем .cpp-файле.Как использовать NULL в .cpp-файле?

#include "OnlyInstance.h" 

OnlyInstance* OnlyInstance::instance = NULL; 
.......... 

но компилятор сказал мне "ошибка C2065: 'NULL': необъявленный идентификатор". Так что означает, что я должен

#include <stdio.h> 

перед ним? Но я также включил stdio.h в основной файл. Так stdio.h будет включен много раз при компиляции, правильно? Как я могу правильно использовать NULL?

Другой вопрос в том, что я знаю, что могу использовать 0 вместо NULL, но какой способ рекомендуется использовать в C++?

+1

Как в стороне, поскольку вы инициализируете статический указатель с помощью «NULL», вы также можете просто опустить инициализатор. – Deduplicator

ответ

11

NULL определен в различных заголовках, например, в <cstddef>.

Вы должны, однако, предпочесть nullptr над NULL, если ваш компилятор поддерживает это.

Включение заголовка несколько раз не является проблемой (если заголовок не ужасно сломан, а стандартные заголовки нет).

+1

, который он должен использовать для C++ 11 и более поздних версий. – Deduplicator

+0

Но если я делаю #include в OnlyInstance.cpp и main.cpp одновременно, то #include 'OnlyInstance.h' в main.cpp. Что сделает компилятор? stdio.h будет включен дважды? Спасибо! –

5

NULL - это только определение со значением 0. Это точно так же.

Но если у вас есть доступ к C++ 11, я бы рекомендовал использовать nullptr.

+1

На самом деле это может быть что-то другое. Это одна из причин, чтобы предпочесть «nullptr». – Deduplicator

+0

Технически это 0 такого же размера, как указатель, поэтому он может быть 0 или 0L или 0LL в зависимости от того, какой тип целого соответствует указателю. В противном случае такие вещи, как 'printf («% p », NULL), будут ошибочными. –

+0

@MatsPetersson: Это было бы неплохо, иногда, для скрытия ошибок. Однако это не гарантировано. – Deduplicator

Смежные вопросы