Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

30.05.2004, 00:48

_OLD_IOSTREAMS_ARE_DEPRECATED - Problem

Hallo,

es ist nicht wirklich ein Problem, jedoch empfinde ich es als störend. Bei jedem C++ Projekt welches ich erstelle (Visual Studio .NET), erscheint folgende Meldung immer dann, wenn ich die Datei <iostream.h> inkludiere:

Zitat


c:\Programme\Microsoft Visual Studio .NET\Vc7\include\useoldio.h(29) : warning C4995: '_OLD_IOSTREAMS_ARE_DEPRECATED': der Name, der als #pragma markiert war, wurde verworfen


Es gibt wohl eine alte Version der iostream.h Datei, und eine neue Version. Laut ANSI C++ muss man die Endung .h bei Standardheadern nicht mehr angeben, mache ich jedoch "include <iostream>" (also ohne die Dateierweiterung), so kennt er das Symbol "cout" z.B. nicht.

In der Datei "useoldio.h", welche ja anscheinend dieses Warning generiert, steht folgendes:

Zitat


*useoldio.h - force the use of the Microsoft "classic" iostream libraries.


Wieso werden die klassischen Libraries benutzt? Oder warum... naja Fragen über Fragen :D

Ich hoffe jemand kann mich mal ein wenig aufklären über diese ganze iostream.h Sache :)


Danke!

2

30.05.2004, 00:56

Zu der Warnung kann ich dir nichts sagen, da ich noch nie die iostream.h eingefügt habe. Wenn ich erlich bin hab ich nicht einmal gewust das es diese gibt. Kenne nur iostream ohne .h oder halt stdio.h.

der gesamte STL kram ist in dem Namensraum "std" gepackt. Benutz die iostream ohne .h und schreib statt "cout" "std::cout" oder schreib am anfang "using namespace std". Dann sollte auch weiterhin "cout" gehen,
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

3

30.05.2004, 12:56

die dinger mit H sind veraltet, genau so wie stdio.h die heißt jetzt cstdio.
Ich poste heut abend mal ne liste von headern die erneuert wurden.

Anonymous

unregistriert

4

30.05.2004, 20:53

Danke für die Antwort, ich habe glaube ich totales Chaos in meinem Code... ich hatte auch die fstream.h Datei eingebunden, und es jetzt auf "fstream" (ohne .h) geändert, was wohl analog auch richtig ist :)

Tja, nun kompiliert das ganze Prog überhaupt nicht mehr, ich habe bei einem eigenen Dateiverwaltungsklasse z.B. sowas stehen:

Quellcode

1
if ( strchr(pFlags, 'r') != NULL ) i = i | ios::in;  // Eingabe


Wenn 'r' gesetzt ist, dann soll er eben "ios::in" als Eingabe-Flag setzen. Leider kennt er "ios::in" nun überhaupt nicht mehr, wie kann das sein? :( Irgendwie habe ich es dann auf "ios_base::out" geändert, jedoch funktioniert dann "ios::nocreate" immer noch nicht, er scheint dieses "nocreate" flag überhaupt nicht zu kennen.

Kann mir da vielleicht jemand aus diesem Chaos helfen? Wo verstecken sich denn diese ::in und ::nocreate Flags nun?

P.S. habe in dem Programm am Anfang die Headerdateien <iostream>, <fstream> und <ios> eingebunden.

Danke nochmals :)

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

5

30.05.2004, 21:49

hi,

ios ist auch im namespace std!

also müsstest du schreiben für input:

std::ios::in
usw.

Anonymous

unregistriert

6

31.05.2004, 00:01

Ok, aber wieso gibt es "ios::nocreate" bzw. jetzt "std::ios::nocreate" nicht mehr? Das ging doch vorher, so hatte ich es gemacht, damit die Datei beim Öffnen nicht erstellt wurde, falls sie nicht existiert ???

Anonymous

unregistriert

7

04.06.2004, 12:51

Kann mir denn da keiner helfen?

Wie öffnet man denn z.B. eine Datei (mit der STL, also Streams), die - falls sie nicht existiert - nicht erstellt werden soll?

Ich bin z.Z. sehr verwirrt, warum es dieses "ios::nocreate" nicht mehr gibt ???

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

8

04.06.2004, 14:36

die datei wird beim öffnen generell nicht erstellt, drum ist ios::nocreate sinnlos

Anonymous

unregistriert

9

04.06.2004, 16:04

Ist das wirklich bei Dir so? Bei mir wird ganz sicher eine Datei erstellt, wenn ich beispielsweise nur "std::ios::out" als Flag angebe.

Habe gehört, dass ::nocreate sowie auch ::nocreate in den neuen Header Dateien (fstream, istream...) aus Kompatibilitätsgründen zu anderen Betriebssystemen entfernt wurden.

Naja ich mache es jetzt so, dass ich einfach zurvor checke, ob die Datei schon exisitert - dann kann ich entsprechend darauf reagieren.

Werbeanzeige