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?
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.
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.
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
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.
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.