Почему g++ не может найти iostream.h? - программирование
Подтвердить что ты не робот

Почему 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 скомпилирует?

Спасибо за любую помощь.

4b9b3361

Ответ 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 С++ находится в переменной окружения пути, команды будут работать.