C++ Header Dateien funktionieren nicht

FragenC++ Header Dateien funktionieren nicht
Alexander Hungenberg - Donnerstag, 17. März 2005 18:57 Uhr

Hallo LC,
Bei mir hat sich mal wieder ein Problem offenbart. Und zwar funktionieren dieses mal die C++ include Dateien nicht. Im Moment geht es mir ersteinmal um iostream. Die Datei ist vorhanden. In dieser Datei werden ja auch einige Dateien includiert. istream, ostream und bits/c++config.h. letztere ist bei mir nicht vorhanden. Der Compiler (gcc3.4) gibt bei einem Hello World Programm a la

#include

int main()
{
cout

2 Antworten
Malte Buck - Donnerstag, 17. März 2005 19:19 Uhr

Hallo,

das ist ein Namespaceproblem. Der Include sollte so sein:

#include
using std::cerr;
using std::cout;
using std::endl;

mfg
Malte

Kevin Krammer - Donnerstag, 17. März 2005 20:08 Uhr

Alternativ den Namespace direkt bei der Benutzung eines Objekts angeben

#include int main() { std::cout

Murphy - Donnerstag, 17. März 2005 22:11 Uhr

Oder gleich den gesamten Namespace einbeziehen:

#include
using namespace std;

Alexander Hungenberg - Samstag, 26. März 2005 17:59 Uhr

Also, erstmal danke für die vielen Antworten.
ich schreibe meine Programme meistens in KDevelop 3. Wenn ich dann auf Programm ausführen klicke, fragt das, ob ich Automake usw. ausführen will. Dann beendet das aber immer mit Status 2 (???). Unter der Konsole mit gcc kompilieren geht auch nicht. Nur mit g++ funktioniert das.

Alex

Murphy - Samstag, 26. März 2005 20:30 Uhr

Das kann jeweils an allem möglichen liegen; deine Beschreibung ist viel zu allgemein gefaßt!

Wenn KDevelop automake ausführen will heißt das du hast zwar ein KDev-Projekt angelegt aber bisher noch nichts erstellt. Bringt’s was wenn du eine erneute Konfiguration des Projekts (Erstellen ? Configure ausführen) durchführst? Ist automake überhaupt installiert? Was genau machst du, und wie genau lauten die Meldungen (jeweils die letzten 10 – 15 Zeilen)?
Auch hier werden für eine genaue Diagnose mehr Details benötigt. Wie lautet denn die Compilerausgabe?

Alexander Hungenberg - Sonntag, 27. März 2005 12:39 Uhr

Ohh, entschuldigung. Automake Version 1.4 ist installiert. Ich drücke jetzt in KDevelop 3.1.2 auf Programm ausführen. Dann kommt unter Meldung folgende Ausgabe:

cd ‚/home/alex/KDevelop/test‘ && WANT_AUTOCONF_2_5=“1″ WANT_AUTOMAKE_1_6=“1″ make -f Makefile.cvs && mkdir ‚/home/alex/KDevelop/test/debug‘ && cd ‚/home/alex/KDevelop/test/debug‘ && CXXFLAGS=“-O0 -g3″ „/home/alex/KDevelop/test/configure“ –enable-debug=full && cd ‚/home/alex/KDevelop/test/debug‘ && WANT_AUTOCONF_2_5=“1″ WANT_AUTOMAKE_1_6=“1″ make -k

*** Beendet mit Status: 2 ***

Das ganze bei Programm:

#include
using std::cerr;
using std::cout;
using std::endl;

int main()
{
cout

Tobias Hunger - Sonntag, 27. März 2005 20:07 Uhr

Schon mal versucht auf automake 1.6 aufzurüsten? Er fragt ja recht explizit
danach.

gcc ist ein C Kompiler, g++ ein C++ Kompiler.

Alexander Hungenberg - Montag, 28. März 2005 10:54 Uhr

Ich hab auf automake 1.6 aufgerüstet. Autoconf 2.5 ist bereits installiert. Außerdem sind alle anderen autoconf/automake Versionen deinstalliert.

In dem Projekt ist bereits eine Datei zum Kompilieren vorhanden (Das oben genannte Hello World Programm). Wenn ich unter erstellen auf „Configure ausführen“ gehe, erklärt der mir, das die Configure Datei nicht existiert. hier einmal die Genaue Meldung:

cd ‚/home/alex/KDevelop/test2/debug‘ && CXXFLAGS=“-O0 -g3″ „/home/alex/KDevelop/test2/configure“ –enable-debug=full
/bin/sh: line 1: /home/alex/KDevelop/test2/configure: Datei oder Verzeichnis nicht gefunden

und wenn ich auf Automake und Konsorten ausführen klicke kommt folgende Meldung:

cd ‚/home/alex/KDevelop/test2′ && WANT_AUTOCONF_2_5=“1″ WANT_AUTOMAKE_1_6=“1″ make -f Makefile.cvs
aclocal
aclocal: configure.in: 8: macro `AM_PROG_LIBTOOL‘ not found in library
make: *** [all] Fehler 1

In der Hoffnung, dass ich mir helfen könnt, Alex

Murphy - Montag, 28. März 2005 12:04 Uhr

Wenn du Hilfe zu per Kommandozeile ausgeführten Befehlen suchst bitte auch immer die *exakte* Kommandozeile angeben, das hilft häufig bei der Diagnose. Dein System sieht mir nicht nach einer Standard-Entwicklungsumgebung aus. Vielleicht wäre es sinnvoll die Entwicklerkomponenten deiner Distri zu installieren sofern vorhanden statt irgendwas selbst zusammenzuschustern; die sind meistens aufeinander abgestimmt. Sollte deine Distri jedoch so alt sein daß noch kein KDevelop 3 dabei ist wirst du um ein Update nicht herumkommen. Für KDevelop würde ich empfehlen das Projekt jetzt nochmal neu aufzusetzen, den Code zu übernehmen und es nochmal zu probieren; evtl. gab es Probleme mit dem veralteten automake. Auf Fehlermeldungen und Warnungen in der Konsolenausgabe achten! Der von Hand erstellte Teil wurde compiliert, konnte aber nicht gelinkt werden; es fehlt vermutlich nur die Angabe der C++-Stdlib. Bitte mache dich mit dem Umgang mit gcc, hier insbesondere den Parametern -L und -l, vertraut. gcc ist die „GNU Compiler Collection“, g++ normalerweise nicht viel mehr als ein Link darauf, evtl. noch mit ein paar Voreinstellungen für die C++-Compilation. gcc ist i. d. R. in der Lage die Sprache anhand der Dateiendungen selbst zu erkennen (sofern du nichts Außergewöhnliches verwendest); dein Testprogramm wurde demnach auch korrekt als C++ kompiliert (sonst hätte es Meldungen wegen des Scope Operator gegeben).
So gesehen ist es also egal unter welchem Namen du den Compiler aufrufst, evtl. mußt du per gcc jedoch zusätzliche Angaben machen. Da du offensichtlich ein kompletter C++-Neueinsteiger bist würde ich dir emfpehlen ein Tutorial zu konsultieren, das dich durch die ersten Schritte geleitet; das kann die LC *nicht* leisten! Speziell der Umgang mit dem Compiler kann etwas kryptisch sein und führt bei Anfängern schnell zur Frustration, obwohl das eigentlich gar kein programmiertechnisches Problem ist. Alternativ könntest du für erste Programmierschritte auf eine handlichere Interpretersprache umschwenken.

dr_strangelove - Montag, 28. März 2005 17:44 Uhr

Frage nebenbei: Was ist der Unterschied zwischen gcc g++?

g++ linkt automatisch die libstdc++ dazu, gcc nicht. wenn du also „gcc -lstdc++ programm.cpp -o programm“ eingibst, sollte das auch funktionieren.

dr_strangelove - Dienstag, 29. März 2005 10:29 Uhr

Eine weitere Alternative ist, statt einzubinden. Dann sind cout und Konsorten im globalen Namensraum und du kannst sie ohne std:: benutzen.

Das ist allerdings nicht unbedingt zu empfehlen; diese Möglichkeit ist nur vorhanden, um ältere C++ Programme weiterhin compilieren zu können.

Alexander Hungenberg - Dienstag, 29. März 2005 21:45 Uhr

Hi,
ersteinmal vielen Dank für die Zeit die du dir genommen hast.

1 + 3. Bis jetzt hab ich immer das angegeben, was bei KDevelop unter Meldungen angezeigt wird. Wenn das falsch ist, was denn dann?

2. Distribution ist aktuelle Debian Testing. Was meinst du mit Entwicklerkomponenenten? Standardmäßig war gcc/g++ 3.3 drauf. Ich hab upgegraded auf 3.4. Automake war 1.4. Ist 1.6 (es gibt schon Pakete bis 1.9, sollte ich diese installieren?). KDevelop hab ich über apt-get nachinstalliert (kdevelop3 + Abhängigkeiten.

4. Ich mach das normalerweise wenn ich in KDevelop auf Programm ausführen klicke. Was der da genau ausführt weiß ich nicht. Und wenn ich gerade nicht in KDevelop arbeite, mach ich es mit „g++ programm.cpp“, was dann auch einwandfrei funktioniert.

6. Ganz so schlimm ist es nicht. Als Interpretersprache kenne ich PHP ganz gut, und auch mit Visual Basic hab ich schon meine Erfahrungen (In C++ eher Anfänger, also noch nicht über die Zeiger hinweg). Bis jetzt hat das auch ganz gut funktioniert. Nur als ich Debian das letzte mal neuinstalliert habe, funktionierte alles nicht mehr…

Klaus Wagner - Freitag, 18. März 2005 10:36 Uhr

Die Lösung für dein Problem haben dir meine Vorredner ja schon gegeben. Aber hier sind ein paar Links die dir vieleicht weiterhelfen können:
[1] Hier gibt es eine Online-Version des Buches C++-Entwicklung mit Linux.
[2] Hier gibts jede Menge Informationen zu C++.
[3] Die C++ Notizen sind eine Sammlung nützlicher Tips und Hinweisen für die C++ Programmierung. Sie sind allerding kein Lehrbuch sondern eher ein Nachschlagewerk. Die gabs früher einmal als PDF zum Download, aber da habe ich nichts mehr gefunden.

[1] http://www.cpp-entwicklung.de/
[2] http://www.c-plusplus.de/cms/
[3] http://www.notizen-zu-cpp.de/index.html

Murphy - Freitag, 18. März 2005 11:29 Uhr

Sehr empfehlen kann ich auch Herbert Schildts „C++ – The Complete Reference“, inzwischen in der vierten Ausgabe. Gibt’s zwar nur auf Englisch, ist aber die beste C++-Referenz die ich bisher in der Hand hatte und außerdem noch ein Lehrbuch/Nachschlagewerk für Fortgeschrittene. Auch Namespaces und New Style Header sind da drin sachlich und verständlich beschrieben.

Klaus Wagner - Freitag, 18. März 2005 12:33 Uhr

Ich glaub die gibts auch auf Deutsch. Herbert Schildt C++ Die professionelle Referenz(ISBN 3-8266-1367-8). Hab ich mir vor zwei, drei Wochen gekauft. Ist sogar recht günstig für ein Fachbuch.

Murphy - Freitag, 18. März 2005 13:03 Uhr

Tatsächlich; die Übersetzung hätte ich nicht hinter diesem Titel vermutet, das Original kostet immerhin 47 ¤ (20 ¤ mehr) und ist rund 200 Seiten dicker… Ich weiß aber immer noch nicht was sich hinter der Bezeichnung „Studienausgabe“ versteckt.

Deine Antwort