Standardbibliothek iostream einbinden

HPB

Erfahrenes Mitglied
Hallo,
ich bin C++ Anfänger. Wenn ich mein Hello World-Programm kompiliere bekomme ich folgende Fehlermeldung:

------ Build started: Project: Hello World, Configuration: Debug Win32 ------
Compiling...
Source1.cpp
c:\Dokumente und Einstellungen\peter\Eigene Dateien\Visual Studio\Projects\Hello World\Source1.cpp(1) : fatal error C1083: Cannot open include file: 'iostream.h': No such file or directory
Build log was saved at "file://c:\Dokumente und Einstellungen\peter\Eigene Dateien\Visual Studio\Projects\Hello World\Hello World\Debug\BuildLog.htm"
Hello World - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


Was muss ich machen, damit der Compiler die Standardbibliothek findet? Sie liegt bei mir unter C:\Programme\Microsoft Visual Studio 8\VC\include. Daher habe ich mal dieses Verzeichnis in meinen Pfad aufgenommen. Daran scheint es aber nicht zu liegen (Ich habe ma nach der Fehlermeldung gegooglet, aber nichts gefunden :( )

Ich habe mir Microsoft Visual C++ 2005 Beta1 8.x von der Microsoft Webseiter heruntergeladen und ohne Zusatzkomponenten installiert. Sind weitere Schritte nötig, um kleine Beispielprogramme (Win32, Console-Anwendungen) zu erstellen?
 
Zuletzt bearbeitet:
Da hast du aber nicht gründlich gegoogelt. Iostream.h gab es in der älteren Ausgabe von MSVC, und später nicht mehr. Nach dem richtigen Standard heisst die Datei jetzt nur iostream (also #include <iostream>) und der Inhalt der Datei befindet sich im Namespace std, wo er hingehört.

Also wirst du eventuell in deinem Programm nach dem include ein using namespace std; schreiben müssen (für kleine Programme in Ordnung), oder statt "cout", "cin" usw. "std::cout", "std::cin" einsetzen müssen.
 
;-] Dann solltest du ihm aber auch gleich dabei erklären, warum man einen Namensraum (namespace) eingeführt hat, oder? Beim Modularisieren eines Programmes, also dem intelligenten (hust) Aufteilen des Quellcodes in mehrere, unabhängige Module bzw. Teilprogramme, gab es als letzte Instanz in C/C++ nur noch globalen Daten selber. Das Problem dabei war, daß man für eine eindeutige Unterscheidung zwischen einer Funktion foobar() von Autor A und foobar() von Autor B keine Hilfsmittel mehr besaß. Autor B musste also entweder seine Funktion _foobar() oder foobar_() oder sonstwie anders nennen, damit der Compiler alle Funktionen auflösen konnte.

Man merkte also, der globale Namensraum reichte für viele Sachen einfach nicht mehr aus, um zeitkritisch und -sparend arbeiten zu können. Ganz besonders in C++, deren Augenmerk ganz besonders auf die Erfordernisse der (Software)Industrie und der Kostenreduzierung sowie Zeitersparnis gelegt worden ist, hätte jede nachträgliche Änderung von bestehendem Quellcode außerhalb des Rahmens einer normalen Softwarewartung neue und unnötige Kosten dargestellt. Daher wurde als neues Unterscheidungskriterium der globale Namensraum mit der Möglichkeit belegt, eigene Namensräume zu schaffen. Autor A erstellt also einen Namensraum A, wo er seine Funktion foobar() ablegen kann und Autor B einen Namensraum B für seine Funktion foobar(). Je nachdem welche man nun gerade benötigt, kann man nun in C++ einfach den jeweiligen Namensraum dereferenzieren und die Funktionen usw. darin benutzen:

Code:
A::foobar();
      
  B::foobar();
 
  foobar(); // Gehört dem globalen Namensraum an

Aus dieser neuen Eindeutigkeit heraus wurde der neue C++ Standard mit all seinen bisherigen Elementen aus C einfach in adaptierte std-Namensräume gepackt. Die Headerdateien der alten C-Bibliothek wurden namentlich ein wenig angepasst, so wurde aus <math.h> eben <cmath>, aus <stdlib.h> eben <cstdlib> usw. Um zu Erkennen, das es sich hierbei um C++ Headerdateien handelt, sind diese ohne .h Als Dateiendung aufgenommen worden. Der gültige Namensraum ist wie gesagt std -> Standard.
 
Danke für die ausführliche Antwort (WAS EIN SERVICE !).

Ich lerne C++ z.Z. mit folgendem Buch:

C++ in 21 Tagen - Jesse Liberty, ISBN 3-8272-5624-0. Erscheinungsdatum: 1999


Ist mein Buch zu alt? (Es gibt ein Kapitel über Namensbereiche, ist aber Tag 17 und ich bin erst bei 13). Hat sich seit '99, noch mehr geändert? Sollte ich lieber mit einem neueren Werk weitermachen?
 
:rolleyes: Wenn ich den Buchtitel schon höre, erinnert mich das sofort an sowas wie Lesen lernen in 21 Tagen oder so!

Ich würde diese Schinken (genau wie diese Dummy-Bücher) sofort verbrennen und ein anständiges C++ Buch kaufen. Dabei meine ich nicht die C++ Bibel TCPPPL vom Meister persönlich, sondern etwas praktischeres wie C++ Programmierung, Ulrich Breymann, Hanser-Verlag. Damit lernt man C++ auf jeden Fall. :)
 
Dann solltest du ihm aber auch gleich dabei erklären, warum man einen Namensraum (namespace) eingeführt hat, oder?
Hört, hört. Nimm es einfach mal als Tatsache, dass nicht einmal Endurion den ganzen Tag Zeit hat, Fragen zu beantworten. Wäre ja schön, aber ich selber halte es auch nicht durch. Besser viele kurze Antworten geben, die vielen zeigen, in welche Richtung man weitersuchen muss, als gar keine Antwort. Nicht wahr?
Den Ulrich Breymann habe ich übrigens auch ganz doll lieb. Besonders das "Designing Components with the C++STL" habe ich sehr ins Herz geschlossen. Empfehlen würde ich auch noch die "Effective C++"-Reihe von Scott Meyers. Die darf man sich nicht entgehen lassen.
 
Ich habe doch nicht gesagt, daß der gute Endurion so ausschweifen soll wie ich, sondern daß er ihm mal kurz erklärt, was es mit den Namespaces so auf sich hat. Das mein Post so lang geworden ist, lag wohl eher daran das ich gute Laune habe ;), sonst werden die Posts eher auch rationell kurz.

Und ja, das STL-Anhängsel von Breymann ist auch in meiner Ehrenecke gelandet. Kann man btw. aber auch als PDF downloaden, nur so mal nebenbei erwähnt.
 
Jo, ich hatte da einfach nicht soviel Zeit, war mal kurz vor Büroschluss. Und manchmal habe ich leider auch nicht die Laune, so einen Riesen-Beitrag rauszutippen.
Deshalb sag ich mal danke im Interesse des Forums, dass du das so ausführlich (und gut) erklärt hast.
 
Zurück