Как скомпилировать исходный код C ++ (ошибка «iostream.h not found»)?


20

Я не хочу обсуждать C ++ или любой другой язык программирования! Я просто хочу знать, что я делаю не так с Linux Ubuntu по поводу компиляции helloworld.cpp!

Я изучаю C ++, поэтому мои шаги:

откройте hello.cpp в vim и напишите это

#include <iostream.h>
int main()
{
    cout << "Hello World!\n";`
    return 0;
}

Итак, после этого я попробовал в терминале это

g++ hello.cpp

И выход

hello.cpp:1:22: fatal error: iostream.h: No such file or directory
compilation terminated.

Что ты посоветуешь? Любое полезное пошаговое руководство для меня? Спасибо!


2
В случае, если кто-то рассматривает возможность голосования, чтобы закрыть этот вопрос как не по теме: это действительно проблема, специфичная для платформы, потому что самый популярный компилятор C ++ для Windows (Microsoft Visual C ++) принимает этот синтаксис, но большинство других компиляторов (в том числе g++в Ubuntu) не принимайте это.
Элия ​​Каган,

#include <iostream> using namespace std; int main () {cout << "Hello World"; вернуть 0; } это может работать ...

Ответы:


43

Вы должны использовать #include <iostream>, а не iostream.h; .h форма очень устарел и уже много лет.

Вы можете прочитать больше, чем вы, вероятно, хотите знать, в формах .h против не .h здесь: http://members.gamedev.net/sicrane/articles/iostream.html

(Кроме того, вы должны написать std::coutили иметь строку, using namespace std;иначе ваша следующая ошибка будет о том, что компилятор не найдет определение для cout.)


4
@gabriel C ++ имеет долгую историю, уходящую в середину 1980 года. В настоящее время существует несколько опубликованных стандартов, последний из которых (C ++ 11) был выпущен ранее в этом году, а предыдущий (тот, что все компиляторы следуют сегодня) датируется 2003 годом (C ++ 03). Справочник, который вы связали, кажется, намного старше этого, хотя, судя по упомянутому в нем программному обеспечению компилятора (согласно Википедии, Borland Turbo C ++ был прекращен в 1994 году). Если вы выберете учебник, соответствующий стандарту C ++ 03, ваш код будет работать на любом дистрибутиве Linux, доступном сегодня.
Риккардо Мурри

1
@ gabriel Похоже, на ваш вопрос уже ответили в StackOverflow: stackoverflow.com/questions/909323/…
Риккардо Мурри

1
Вам также может понадобиться: sudo apt-get install build-essential
david6

2
@ david6: у меня установлена ​​необходимая сборка, но в iostream.hмоей системе ее нет. На самом деле, заголовочные файлы C ++ устанавливаются libstdc ++ - dev , что требуется для пакета компилятора C ++ g ++ , что, в свою очередь, требуется для build-essential . Так что, нет, вам не нужна сборка, необходимая для компиляции простых программ на C ++; достаточно установить g++пакет.
Риккардо Мурри

1
Для того, чтобы просто coutработать без std::префикса, using std::cout;предпочтительнее using namespace std;. Даже несколько usingоператоров (без namespace), как правило, лучше, так как вы не вводите идентификаторы из stdпространства имен, которые вам не нужны, и могут конфликтовать с именами в вашей собственной программе.
Элия ​​Каган,

15

Вы должны измениться iostream.hна iostream. Я также получал ту же ошибку, что и вы, но когда я перешел iostream.hна просто iostream, она работала правильно. Может быть, это будет работать для вас.

Другими словами, измените строку, которая говорит:

#include <iostream.h>

Заставьте это сказать вместо этого:

#include <iostream>

Файлы заголовков стандартной библиотеки C ++, как определено в стандарте, не имеют .hрасширений.

Как уже упоминалось в ответе Риккардо Мурри , вам также нужно будет позвонить coutпо его полностью определенному имени std::coutили иметь одну из этих двух строк (желательно ниже ваших #includeдиректив, но выше вашего другого кода):

using namespace std;
using std::cout;

Второй способ считается предпочтительным, особенно для серьезных программных проектов, поскольку он затрагивает std::cout, а не вводит все имена в stdпространство имен (некоторые из которых могут потенциально мешать именам, используемым в вашей программе).


Отличный ответ. Отвечая на вопрос @ gabriel, вы разрешили пару побочных недоразумений, с которыми я сталкивался годами.
изоморфизм
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.