Як скомпілювати вихідний код C ++ (помилка "iostream.h не знайдено")?


20

Я не хочу обговорювати C ++ або будь-яку мову програмування! Я просто хочу знати, що я роблю не так з Linux ubuntu щодо компіляції helloworld.cpp!

Я вивчаю С ++, тому мої кроки:

відкрийте hello.cpp in 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>, використовуючи простір імен std; int main () {cout << "Привіт, світ"; повернути 0; } це може працювати ...

Відповіді:


43

Ви повинні використовувати #include <iostream>, не iostream.h; .h форма дуже застарів і вже багато років.

Ви можете прочитати більше, ніж ви, напевно, хочете дізнатись у формах .h vs non- .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 / ...
Ріккардо Murri

1
Вам також можуть знадобитися: sudo apt-get install build-
basic

2
@ david6: У мене встановлена ​​необхідна збірка, але її немає iostream.hв моїй системі. Насправді, файли заголовків C ++ встановлюються libstdc ++ - dev , що вимагається пакетом компілятора C ++ g ++ , що, в свою чергу, вимагає складання . Отже, ні, для складання простих програм 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.