Hallo, ich habe eine Frage zu unterschiedlichen Versionen des Gnu compilers. Bisher haben wir Suse Linux 7.2 mit dem dazugehörigen gnu c++ compiler verwendet, das übersetzten der folgenden Zeile war hier kein problem switch (rw) { case 'r' : file.open(filename,ios::in || ios::nocreate); //if (!file) exit(-1); erstmal entfernt break; case 'w' : file.open(filename,ios::out); //if (!file) exit(-1); break; default : exit(-1); break; } Jetzt verwenden wir Suse Linux 8.2 und bekommen bei der gleichen Zeile die Fehlermeldung: ios undeclared Was hat sich da in diesem Zusammenhang am Compiler geändert? Danke schon mal für eure Hilfe. Gruss Wilfrid
Eberhard Wilfrid ZFF TE-PR wrote:
Hallo,
ich habe eine Frage zu unterschiedlichen Versionen des Gnu compilers.
Bisher haben wir Suse Linux 7.2 mit dem dazugehörigen gnu c++ compiler verwendet, das übersetzten der folgenden Zeile war hier kein problem
switch (rw) { case 'r' : file.open(filename,ios::in || ios::nocreate); //if (!file) exit(-1); erstmal entfernt break; case 'w' : file.open(filename,ios::out); //if (!file) exit(-1); break; default : exit(-1); break; }
Jetzt verwenden wir Suse Linux 8.2 und bekommen bei der gleichen Zeile die Fehlermeldung:
ios undeclared
Was hat sich da in diesem Zusammenhang am Compiler geändert?
Danke schon mal für eure Hilfe.
Gruss
Wilfrid
Hallo, obwohl ich nicht sicher bin, hat sich da evtl. etwas an den Header-Dateien geändert. Wie auch immer, der Compiler hat beim finden des Symbols "ios" immer im Namespace "std" geschaut und ist dort fündig geworden. Das passiert nun nicht mehr. Es gibt mehrere Lösungen für dieses Problem. Ich empfehle, bei jeder Verwendung von ios den Namespace explizit anzugeben, also "std::ios" zu verwenden. Das gleiche gilt für alle Symbole, bei denen der Compiler seit der Umstellung meckert, z. B. die Container vector, set, map und auch string. Grüße Stefan
Am Montag, 15. September 2003 11:56 schrieb Eberhard Wilfrid ZFF TE-PR:
Hallo,
ich habe eine Frage zu unterschiedlichen Versionen des Gnu compilers.
Bisher haben wir Suse Linux 7.2 mit dem dazugehörigen gnu c++ compiler verwendet, das übersetzten der folgenden Zeile war hier kein problem
switch (rw) { case 'r' : file.open(filename,ios::in || ios::nocreate); //if (!file) exit(-1); erstmal entfernt break; case 'w' : file.open(filename,ios::out); //if (!file) exit(-1); break; default : exit(-1); break; }
Jetzt verwenden wir Suse Linux 8.2 und bekommen bei der gleichen Zeile die Fehlermeldung:
ios undeclared
Was hat sich da in diesem Zusammenhang am Compiler geändert?
Danke schon mal für eure Hilfe.
Gruss
Wilfrid
Alles was sich vorher im namspace "ios" befunden hat, befindet sich jetzt im namespace "ios_base". D.h. ios_base::in ios_base::out usw. -- Stefan Lang EMail: langstefan@gmx.at
Hello, On Mon, 15 Sep 2003, Stefan Lang wrote: [..]
Alles was sich vorher im namspace "ios" befunden hat, befindet sich jetzt im namespace "ios_base". D.h. ios_base::in ios_base::out usw.
Fuer sowas bietet sich ein #define an, um alten code zu verwenden z.B.: #define ios ios_base bzw. andersrum, um aktuellen code mit ner aelteren libstdc++ zu verwenden: #define ios_base ios Das kann man dann noch via #if __GNUC__ >= 3 usw. genauer an die Umstellungsgrenze von ios nach ios_base festmachen ;) -dnh, oh, good sigmonster ;) -- Listen, three eyes, don't you try to outweird me. I get stranger things than you free with my breakfast cereal. -- Zaphod Beeblebrox
participants (4)
-
David Haller
-
Eberhard Wilfrid ZFF TE-PR
-
Stefan Lang
-
Stefan Sassenberg