Wie kompiliere ich C ++ - Quellcode ("iostream.h not found" -Fehler)?

20

Ich möchte nicht über C ++ oder irgendeine Programmiersprache diskutieren, sondern nur wissen, was ich mit Linux Ubuntu beim Kompilieren von helloworld.cpp falsch mache!

Ich lerne C ++ und meine Schritte sind:

Öffne hello.cpp in vim und schreibe dies

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

Also, danach habe ich es im Terminal versucht

g++ hello.cpp

UND die Ausgabe ist

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

Was schlagen Sie vor? Eine nützliche Schritt-für-Schritt-Anleitung für mich? Danke!

gabriel
quelle
2
Für den Fall, dass jemand darüber nachdenkt, abzustimmen, um diese Frage als "Off-Topic" zu schließen: Dies ist wirklich ein plattformspezifisches Problem, da der beliebteste C ++ - Compiler für Windows (Microsoft Visual C ++) diese Syntax akzeptiert, aber die meisten anderen Compiler (einschließlich g++Ubuntu). akzeptiere es nicht.
Eliah Kagan
#include <iostream> using namespace std; int main () {cout << "Hallo Welt"; return 0; } das kann funktionieren ...

Antworten:

43

Sie sollten #include <iostream>nicht verwenden iostream.h; Die .h- Form ist sehr alt und seit Jahren veraltet.

Sie können hier mehr lesen, als Sie wahrscheinlich auf den .h- oder nicht .h- Formularen wissen möchten : http://members.gamedev.net/sicrane/articles/iostream.html

(Außerdem sollten Sie schreiben std::coutoder eine Zeile using namespace std;einfügen , da sonst der Compiler bei Ihrem nächsten Fehler keine Definition für findet cout.)

Riccardo Murri
quelle
4
@gabriel C ++ hat eine lange Geschichte, die bis Mitte 1980 zurückreicht. Mittlerweile gibt es mehrere veröffentlichte Standards, von denen der neueste (C ++ 11) Anfang dieses Jahres veröffentlicht wurde, und der vorherige (dem alle Compiler heute folgen) stammt aus dem Jahr 2003 (C ++ 03). Die von Ihnen verlinkte Anleitung scheint jedoch viel älter zu sein, wenn man von der darin erwähnten Compiler-Software ausgeht (laut Wikipedia wurde Borland Turbo C ++ 1994 eingestellt). Wenn Sie sich für ein Tutorial nach dem C ++ 03-Standard entscheiden, funktioniert Ihr Code auf allen heute verfügbaren Linux-Distributionen.
Riccardo Murri
1
@ Gabriel Ihre Frage wurde anscheinend bereits auf StackOverflow
Riccardo Murri
1
Möglicherweise benötigen Sie auch: sudo apt-get install build-essential
david6
2
@ david6: Ich habe Build-Essential installiert, aber iostream.hauf meinem System befindet sich kein . Tatsächlich werden C ++ - Headerdateien von libstdc ++ - dev installiert , das vom C ++ - Compilerpaket g ++ benötigt wird , das wiederum von build-essential benötigt wird . Nein, zum Kompilieren einfacher C ++ - Programme ist kein Build-Essential erforderlich . Die Installation des g++Pakets ist ausreichend.
Riccardo Murri
1
Für den einfachen Einstieg coutohne std::Präfix using std::cout;ist vorzuziehen using namespace std;. Auch mehrere usingAnweisungen (ohne namespace) sind im Allgemeinen besser, da Sie keine Bezeichner aus dem stdNamespace eingeben, die Sie nicht möchten, und möglicherweise mit den Namen in Ihrem eigenen Programm in Konflikt stehen.
Eliah Kagan
15

Sie sollten ändern iostream.hzu iostream. Ich habe auch den gleichen Fehler erhalten wie Sie, aber als ich iostream.hzu "Just" gewechselt bin iostream, hat es richtig funktioniert. Vielleicht würde es auch für Sie funktionieren.

Mit anderen Worten, ändern Sie die Zeile, die sagt:

#include <iostream.h>

Lass es stattdessen so sagen:

#include <iostream>

Die im Standard definierten Header-Dateien der C ++ - Standardbibliothek haben keine .hErweiterungen.

Wie bereits erwähnt , müssen Sie Riccardo Murris Antwort auch coutmit dem vollständig qualifizierten Namen aufrufen std::coutoder eine der beiden folgenden Zeilen verwenden (vorzugsweise unter Ihren #includeAnweisungen, jedoch über Ihrem anderen Code):

using namespace std;
using std::cout;

Der zweite Weg wird als vorzuziehen angesehen, insbesondere für ernsthafte Programmierprojekte, da er nur std::coutalle Namen im stdNamespace betrifft (von denen einige möglicherweise die in Ihrem Programm verwendeten Namen beeinträchtigen könnten) , anstatt sie alle einzugeben.

Dhruv Kaushik
quelle
Gute Antwort. Bei der Beantwortung von @ gabriels Frage haben Sie einige Probleme gelöst, die ich seit Jahren habe.
Isomorphismen