Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Короче говоря:
iostream.h удерживается от использования - это - исходная версия Stroustrup, и iostream является версией из комитета по стандартам. Обычно компиляторы указывают на них обоих на то же самое, но некоторые более старые компиляторы не будут иметь более старого. В некоторых нечетных случаях они будут и существовать и отличаться (для поддержки унаследованного кода), и затем необходимо быть конкретными.
"" по сравнению с <> просто означает, проверяют локальные каталоги на заголовок прежде, чем идти в библиотеку (в большинстве компиляторов).
-Adam
Вот достойная ссылка статья.
подводя итоги, приведенная причина:
версия iostream библиотеки, которую произвел Комитет по Стандартам, вполне несколько отличалась от реализации CFront. {Надрез}
Для упрощения перехода Комитет по Стандартам C++ объявил, что код включая стандартные заголовки C++ будет использовать, включают директивы, которые испытывают недостаток в расширении. Этот позволенный компилятор поставщики для поставки старого стиля заголовки библиотеки C++ с.h расширением и модернизированные заголовки без.
преимущество не использования.h версии:
существует несколько причин, почему новый код должен быть написан с помощью версии без расширения заголовочных файлов вместо форм.h. Первой является непредсказуемость такого кода при компиляции на современных компиляторах. Как ранее упомянуто, результатом использования.h заголовков является конкретная реализация. И с течением времени, шанс, что данный компилятор будет иметь старую библиотеку стилей доступными уменьшениями.
Обычно <> используется для системы или стандартных файлов библиотеки, тогда как "" используется для файлов проекта. Я не был бы удивлен, ищет ли Ваш компилятор локально и когда он не может найти его, он принимает значение по умолчанию к стандартной версии библиотеки.
Что касается.h, я не думаю, что на самом деле имеет значение при использовании C. В C++ я помню неопределенно, что была более новая версия и более старая версия и что без h это, как предполагалось, было новой версией, но я даже не уверен, что старая версия все еще существует.
Стандартным путем (и единственный гарантировал, что работал) является < iostream>. на gcc, < iostream.h> (который, возможно, должен был бы быть включен как < backward/iostream.h>) вытягивает соответствующие объявления к глобальному пространству имен (таким образом, Вам не нужен станд.:: префикс пространства имен).
"iostream.h" попробовал бы сначала из каталога с Вашим исходным кодом, так как "" предназначен для заголовков из Вашего проекта. < > должен всегда использоваться для системных заголовков, и "" для Ваших собственных заголовков.
Это действительно два различных вопроса.
различие между.h и заголовками без расширения с тем же именем является историческим. Те с.h расширением из исходного стандарта C++, который не имел некоторых современных функций, таких как пространства имен и шаблоны. Было более просто для нового стандарта поместить ту же самую функциональность в новые заголовочные файлы, чтобы смочь использовать эти новые функции и сохранить старые (.h) файлы для обратной совместимости унаследованного кода.
различие между #include <...> и #include "..." формат является порядком, в котором компилятор ищет файлы. Это является обычно зависящим от реализации, но идея состоит в том что <> взгляды формата в системе включают каталоги сначала, в то время как "" смотрит в том же каталоге как исходный файл что #included это сначала.
Простой ответ на первый ответ - то, что iostream.h не существует, по крайней мере, в реализации GCC. Если Вы идете *, отклоняют, % типа
определяют местоположение iostream.h
/usr/include/c ++/3.4.3/backward/iostream.h
и
, % определяет местоположение iostream
/usr/include/c ++/3.4.3/iostream
/usr/include/c ++/3.4.3/backward/iostream.h
, Как в статье Zee говорится, iostream.h для обратной совместимости.