Gcc findet headerdateien nicht

Hallo!

Ich will auf Linux C++ Programme erstellen. Der gcc findet aber die System-Headerdateien nicht, die man angibt.

Im Quelltext steht also oben: #include
Bei Kompilierung mit
-> gcc -o programm programm.cc
sagt der Compiler, dass die Funktion cout unbekannt ist. D.h. er findet den Header iostream nicht.

Die Headerdateien befinden sich in /usr/include/g++
Muss man diesen Pfad vielleicht irgendwo einstellen?

Danke für Hilfe
Ursula

Im Quelltext steht also oben: #include
Bei Kompilierung mit
-> gcc -o programm programm.cc
sagt der Compiler, dass die Funktion cout unbekannt ist. D.h.
er findet den Header iostream nicht.

Nein, das bedeutet, dass du den falschen namespace benutzt. Probier mal das:

#include 

using namespace std;

int main( void ) {
 cout 

Und lern was darüber. Namespaces sind nützlich.

Probier mal das:

#include

using namespace std;

int main( void ) {
cout

Das über Namespaces hab ich vorher noch nicht gewusst, danke! Aber es funktioniert trotzdem noch nicht.
Der gcc meldet jetzt lauter
undefined reference to ‚std::cout‘ und
_undefined reference to 'std::basic_ostream und so.

Könnt ihr mir weiterhelfen?_

Noch was

-> gcc -o programm programm.cc

Benutz’ für C+±Programme auf jeden Fall g++ statt gcc, der normale C-Compiler linkt nicht gegen die libstdc++.

Ich will auf Linux C++ Programme erstellen. Der gcc findet
aber die System-Headerdateien nicht, die man angibt.

Im Quelltext steht also oben: #include

Ich kenn mich mit c++ nicht so aus, aber sollte es nicht

#include 

heissen, also mit punkt H hinten dran an iostream?

Li

Im Quelltext steht also oben: #include

Ich kenn mich mit c++ nicht so aus, aber sollte es

nicht

#include

heissen, also mit punkt H hinten dran an iostream?

Ne, das stimmt schon. Für die System-Headerdateien auf
Linux braucht man das .h nicht angeben.

Ursula

Ich kenn mich mit c++ nicht so aus, aber sollte es nicht

#include

heissen, also mit punkt H hinten dran an iostream?

Nein, das sollte es nicht. Diese Header gibt es zwar, deren Verwendung ist allerdings nicht mehr „zeitgemäß“.

http://www.parashift.com/c+±faq-lite/coding-standar…

Hallo Ursula,

du kannst an der Konsole mit Eingabe: echo $PATH (gibt aus was in PATH gespeichert ist) überprüfen, ob der Pfad zu den headern in deinem profile gespeichert ist.
Wenn nicht, gibt es irgendwo die Möglichkeit, den gewünschten Pfad hinzuzufügen.
Ich kenn mich nur mit Unix aus, dort liegt in meinem homeverzeichniss eine Datei namens .profile in der gibt es eine Zeile:
export PATH=$PATH::/opt/bin:/undsoweiter
die Aufzählungen jeweils mit : getrennt, vermutlich gibt es so eine Datei bei Linux auch.

Ich hoffe, das hilft dir bisschen weiter und du wirst findig.
Gruß Sabst

du kannst an der Konsole mit Eingabe: echo $PATH (gibt aus was
in PATH gespeichert ist) überprüfen, ob der Pfad zu den
headern in deinem profile gespeichert ist.

PATH gibt an, wo die shell nach ausführbaren Dateien sucht und hat mit C(++)-Headern nun rein garnichts zu tun.

hallo ursula,
ich habe einen beispiel beim mir getestet:

#include
int main()
{
cout

das beispiel lässt sich fehlerfrei compilieren aber mit einer warnung (iostream.h deprecated)
g++ test.cpp -o test-cout
und mit ./test-cout ausgeführt.

ich habe die erfahrungen gemacht dass linux sehr stark zwischen c datein (mit gcc compilieren) und c++-dateien (mit g++ comulieren) macht.
noch ein anderee punkt ist die datei endung am besten cpp für c++ verwenden weil C (gross) auch manchaml als c++ datei interpretiert wurde.

youssef

Jetzt klappt es! Danke an alle!!!

Was komisch ist:
auf Suse Linux 7 musste ich zum kompilieren eingeben:
gcc test.cpp -o test
und zur Ausgabe des Programms einfach:
test
Ich musste nie den namespace angeben.

Mit Suse 8 muss man also kompilieren mit:
g++ test.cpp -o test
und Programm ausführen mit:
./test
Außerdem muss man den namespace std angeben, sonst kann man gar nicht erst
kompilieren.

Also vielen, vielen Dank für eure Hilfe!!!

Ursula

Noch eine späte antwort…

Was komisch ist:
auf Suse Linux 7 musste ich zum kompilieren eingeben:
gcc test.cpp -o test
und zur Ausgabe des Programms einfach:
test
Ich musste nie den namespace angeben.

Mit Suse 8 muss man also kompilieren mit:
g++ test.cpp -o test
und Programm ausführen mit:
./test
Außerdem muss man den namespace std angeben, sonst kann man
gar nicht erst kompilieren.

Ältere versionen von gcc/g++ verwenden glaube ich automatisch den namespace std, neuere nicht mehr. Den aktuellen Pfad im PATH zu haben gilt i.A. als gefährlich.