Почему g++ не может найти iostream.h?
Я пытаюсь понять, как скомпилировать программы на С++ из командной строки с помощью g++ и (в конечном итоге) Clang on Ubuntu.
Я нашел веб-страницу, которая объясняет MakeFiles, и я следую их указаниям. http://mrbook.org/tutorials/make/
Я загрузил четыре файла примера в их собственный каталог.
- main.cpp
- hello.cpp
- factorial.cpp
- functions.h
Затем я пошел дальше и запустил пример того, как вручную компилировать без MakeFile.
g++ main.cpp hello.cpp factorial.cpp -o hello
Когда я выполнил команду сверху, я получил следующую ошибку из g++:
main.cpp:1:22: fatal error: iostream.h: No such file or directory
compilation terminated.
hello.cpp:1:22: fatal error: iostream.h: No such file or directory
compilation terminated.
Мой единственный опыт написания С++ заключается в использовании IDE, такой как VS С++ Express или CodeBlocks. Разве компилятор не должен знать, что такое iostream.h и где его найти?
Как я могу избавиться от этой ошибки, поэтому программа willl скомпилирует?
Спасибо за любую помощь.
Ответы
Ответ 1
До того, как язык С++ был стандартизован ISO, файл заголовка был назван <iostream.h>
, но когда был выпущен стандарт С++ 98, он был переименован только в <iostream>
(без .h
). Измените код, чтобы использовать #include <iostream>
, и он должен скомпилироваться.
Вам также нужно добавить оператор using namespace std;
в каждый исходный файл (или префикс каждой ссылки на функцию/объект iostream с помощью спецификатора std::
), поскольку пространства имен не существовало в предварительно стандартизованном С++. С++ 98 помещает стандартные библиотечные функции и объекты в пространство имен std
.
Ответ 2
<iostream.h>
никогда не был стандартным заголовком С++, потому что он не попал в стандарт С++.
Вместо этого мы получили <iostream>
, в 1998 году.
Удаляйтесь от учебного материала с использованием нестандартных материалов, таких как <iostream.h>
или void main
.
Однако, как практическое решение для вашего текущего стандартного кода, вы можете попробовать заменить
#include <iostream.h>
с
#include <iostream>
using namespace std;
Не гарантируется работа, но, скорее всего, это сработает.
Ответ 3
Еще одна связанная с этим проблема, которая здесь не упоминалась, поэтому я буду включать ее для любой будущей ссылки, из командной строки компилятор нуждается в обновленной переменной пути среды, чтобы найти местоположение файлов заголовков С++. В Windows вы можете просто обновить среду пути с помощью GUI "расширенных системных свойств" и добавить расположение файлов c++. Это приведет к обновлению переменной среды PATH в командах Windows cmd и Cygwin автоматически после перезапуска оболочки.
Чтобы обновить PATH из Linux или типа оболочки Cygwin...
PATH = $PATH:/your_path_here
Пример: PATH = $PATH:/cygdrive/c/cygwin/lib/gcc/i686-pc-mingw32/4.7.3/include/c++
Также неплохо добавить только каталог include:
PATH = $PATH:/cygdrive/c/cygwin/lib/gcc/i686-pc-mingw32/4.7.3/include/
... или проверьте правильные каталоги для местоположения вашей установки, включите файлы, я рекомендую установить mingw для использования с Cygwin, который вызывается с g++.
Чтобы установить дополнительные необходимые пакеты в Cygwin, запустите программу установки Cygwin и проверьте установку из Интернета, чтобы добавить пакеты из веб-репозиториев и добавить mingw-gcc-g++ и mingw-binutils.
Чтобы скомпилировать: g++ hello.cpp -o привет
Если с помощью утилиты gcc скомпилировать команду:
gcc hello.cpp -o hello -lstdС++
... чтобы получить ваш исполняемый файл.
Пока у вас установлен gcc или mingw, а путь к файлам include С++ находится в переменной окружения пути, команды будут работать.