Форум программистов, компьютерный форум CyberForum.ru

Почему неверно писать #include <iostream.h>? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 225, средняя оценка - 4.93
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
02.10.2011, 16:17     Почему неверно писать #include <iostream.h>? #1
Добрый вечер. Очередной вопрос от чайника)))
Вопрос такой. Почему надо писать #include <iostream>, а не #include <iostream.h>?
Для такого кода:
C++
1
2
3
4
5
6
7
8
9
#include <iostream.h>
#include <conio.h>
using namespace std;
int main()
{
    cout << "Hello World" << endl;
    getch();  
    return 0; 
}
при компиляции выдаёт сообщение об ошибке:
"fatal error C1083: Не удается открыть файл include: iostream.h: No such file or directory"

А вот так всё работает:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    cout << "Hello World" << endl;
    getch();  
    return 0; 
}
Хотя все остальные заголовочные файлы надо подключать с расширением .h
Какая проблема у компилятора с файлом iostream.h? Это конкретно в компиляторе дело? Или как? У меня установлена Visual Studio 2008

И ещё, что означает само сообщение об ошибке:
fatal error C1083: Не удается открыть файл include: iostream.h: No such file or directory
Как его расшифровать?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
02.10.2011, 16:19     Почему неверно писать #include <iostream.h>? #2
Цитата Сообщение от Alex Z Посмотреть сообщение
Хотя все остальные заголовочные файлы надо подключать с расширением .h
Это какие, например? Все стандартные файлы без .h подключаются.
iostream.h - старый стиль.
res
56 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
02.10.2011, 16:20     Почему неверно писать #include <iostream.h>? #3
Потому что формат файла отсутствует.
Очевидно же.
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
02.10.2011, 16:24  [ТС]     Почему неверно писать #include <iostream.h>? #4
И ещё. Забыл.
Зачем нужна строчка №3 и что она означает?
Если без неё, то получаем:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <conio.h>
//using namespace std;
int main()
{
    cout << "Hello World" << endl;
    getch();  
    return 0; 
}
Сообщение о двух ошибках:
error C2065: cout: необъявленный идентификатор
error C2065: endl: необъявленный идентификатор
diagon
Higher
 Аватар для diagon
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
02.10.2011, 16:43     Почему неверно писать #include <iostream.h>? #5
Цитата Сообщение от Alex Z Посмотреть сообщение
Зачем нужна строчка №3 и что она означает?
Пространство имен объявляет.
cout и endl находятся в пространстве имен std, и правильно писать
C++
1
std::cout << "Hello world" << std::endl;
Можно писать using namespace std; и писать
C++
1
cout << "Hello world" << endl;
но лучше к такому не привыкать.
Platinumix
43 / 11 / 0
Регистрация: 28.12.2012
Сообщений: 191
10.03.2013, 05:17     Почему неверно писать #include <iostream.h>? #6
библиотеки от C имеют расширение .h , а библиотеки от C++ без расширений... std это стандартное пространство имен
0x10
10.03.2013, 07:06
  #7

Не по теме:

Цитата Сообщение от Platinumix Посмотреть сообщение
библиотеки от C имеют расширение .h , а библиотеки от C++ без расширений...
Кто, блин, научил называть библиотеками заголовочные файлы...

d3n1sk4
3 / 3 / 1
Регистрация: 11.11.2012
Сообщений: 29
10.03.2013, 09:43     Почему неверно писать #include <iostream.h>? #8
Цитата Сообщение от diagon Посмотреть сообщение
но лучше к такому не привыкать.
А почему?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12282 / 6969 / 784
Регистрация: 27.09.2012
Сообщений: 17,282
Записей в блоге: 2
Завершенные тесты: 1
10.03.2013, 10:41     Почему неверно писать #include <iostream.h>? #9
Цитата Сообщение от d3n1sk4 Посмотреть сообщение
А почему?
Потому что это бред - сваливать все в глобальное пространство имен.
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.03.2013, 11:16     Почему неверно писать #include <iostream.h>? #10
Цитата Сообщение от Croessmah Посмотреть сообщение
Потому что это бред - сваливать все в глобальное пространство имен.
Вопрос спорный. http://www.cyberforum.ru/blogs/34326/blog275.html
l2ded
 Аватар для l2ded
80 / 68 / 11
Регистрация: 10.05.2011
Сообщений: 284
10.03.2013, 11:29     Почему неверно писать #include <iostream.h>? #11
Цитата Сообщение от alsav22 Посмотреть сообщение
Код с двоеточиями, нечитабелен, абсолютно такой же по функционалу что и код без std::. И ещё один момент - кто нибудь в MSDN-е встречал код с std:: именно официальный код???Ну хорошо из 100 кодов возможно пара содержит std::, остальная же часть кода дана с using namespace std; как такая которая позволяет сокращать код (прелагаю посчитать на сколько символов увеличивает std:: в каждой строчке длинну кода).

Таким образом конструкция using namespace std целесообразней в плане сокращения длинны кода, нежели std::. Все гипотетичекие проблеммы перекрёстного использования пространств имён с одинаковыми функциями надуманы и обусловлены кривостью чьих-то рук, либо неправильным их расположением(я о руках) не из того места.
Основная суть.
diagon
Higher
 Аватар для diagon
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
10.03.2013, 11:37     Почему неверно писать #include <iostream.h>? #12
Цитата Сообщение от l2ded Посмотреть сообщение
Код с двоеточиями, нечитабелен,
Бред. На стадии написания хелловорлдов, оно, может быть, так, но в дальнейшем явное указание пространства имен сильно облегчает жизнь.
Взять хотя бы vector. Если он написан как std::vector, то сразу понятно, что это контейнер из STL, а не boost::numeric::ublas::vector, boost::fusion::vector или вообще какой-нибудь геометрический класс.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12282 / 6969 / 784
Регистрация: 27.09.2012
Сообщений: 17,282
Записей в блоге: 2
Завершенные тесты: 1
10.03.2013, 12:37     Почему неверно писать #include <iostream.h>? #13
Цитата Сообщение от l2ded Посмотреть сообщение
Основная суть.
Основная суть в том, что можно еще писать например
C++
1
using std::cout;
А не сваливать все что нужно и не нужно в кучу.
Цитата Сообщение от l2ded Посмотреть сообщение
пространств имён с одинаковыми функциями надуманы и обусловлены
вот пример:
"error C2872: неоднозначный символ" при переменной count
Это тоже полезно к прочтению:
Возникает ошибка с using namespace std;

Цитата Сообщение от ValeryS Посмотреть сообщение
если с чем то не сталкивался это не значит что это не сушествует
Platinumix
43 / 11 / 0
Регистрация: 28.12.2012
Сообщений: 191
10.03.2013, 15:00     Почему неверно писать #include <iostream.h>? #14
Цитата Сообщение от alsav22 Посмотреть сообщение
Вопрос спорный.
ну на самом деле не такой уж и спорный... вообще если вы работаете в команде и делаете более мене большой проект то сваливать все в std это просто не допустимо, поэтому действительно лучше так не привыкать...
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
10.03.2013, 17:12     Почему неверно писать #include <iostream.h>? #15
Цитата Сообщение от l2ded Посмотреть сообщение
Все гипотетичекие проблеммы перекрёстного использования пространств имён с одинаковыми функциями надуманы и обусловлены кривостью чьих-то рук, либо неправильным их расположением(я о руках) не из того места.
Если работаешь над Hello, World в каску - да.

Вопрос этот нисколько не спорный. Чуваки пихают юзинги в хэдэры (ага, пихают!). А я потом подключай хэдер и сиди в каком-то namespace, а то и в 10-ти. Прикольно, да? Своих пространств имен создадут - тож юзинг объявят (опять в хэдере). Зато все коротко и читабельно... без этих надоедливых :: ...

В многоголовом змее горыныче огнедышащем, у которого еще и головы дышат друг на друга, сборка которого осуществляется 30 мин да поможет вас Бог не сойти с ума в контексте небрежной работы с namespace'ми. Предлагаю вообще завести хедер для декларирования в нём использования всех заведенных в проекте неймспейсов.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2013, 14:51     Почему неверно писать #include <iostream.h>?
Еще ссылки по теме:

C++ #include <iostream>
Unable to open include file 'iostream' C++
Cannot open include file: 'iostream.h': No such file or directory C++
C++ Почему visual studio 2008 не видит директиву #include <iostream>
C++ #include<iostream>// подключение библиотек #include <conio.h> #include <climits>

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
14.03.2013, 14:51     Почему неверно писать #include <iostream.h>? #16
Тут ещё забыли упомянуть, что если вдруг разработчики стандартной библиотеки (да и любой другой, пространство имён который программист необдуманно "за'use'ал") добавят в следующей версии оной некий символ, который вдруг совпадёт с символом, который этот программист определил ранее в своём проекте, и программист перейдёт на новую версию этой библиотеки, весь его старый код "волшебным" образом перестанет компилироваться.
Yandex
Объявления
14.03.2013, 14:51     Почему неверно писать #include <iostream.h>?
Ответ Создать тему
Опции темы

Текущее время: 22:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru