Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   C++ wo ist ofstream deklariert? (https://www.delphipraxis.net/167269-wo-ist-ofstream-deklariert.html)

zeras 20. Mär 2012 19:13

Delphi-Version: 5

wo ist ofstream deklariert?
 
Ich habe ein C++ Projekt bekommen und muss von dort einige Sachen nach Delphi konvertieren.
Dazu habe ich mir die Testversion von Visual Studio runtergeladen und versuche, in den 30 Tagen alles nötige umgeschrieben zu haben. Ich habe aber schon beim Compilieren verschiedene Fehlermeldungen. Einmal steht das was von fstream.h drin. Das habe ich schon in fstream geändert. Nun wird aber immer ofstream angemeckert. Da ich von C++ nicht viel Ahnung habe, wollte ich mal bei euch nachfragen, was das mit dem ofstream auf sich hat.

Luckie 20. Mär 2012 22:44

AW: wo ist ofstream deklariert?
 
Wie wäre es mit Google? "c++ ofstream". Erster Link das Beispiel: iostream

BUG 20. Mär 2012 22:52

AW: wo ist ofstream deklariert?
 
Wenn ich das richtig sehe, müsste ofstream eigendlich in <fstream> deklariert sein.

Ich glaube, es wäre hilfreich, wenn du mal den genauen Wortlaut der Fehlermeldung posten würdest.

EDIT: Ist der richtige Namespace (std?) eingebunden?
Code:
using namespace std;

Luckie 20. Mär 2012 22:57

AW: wo ist ofstream deklariert?
 
Tatsache. Aber fstream hat er ja schon inkludiert und in dem Google Beispiel war noch iostream inkludiert.

Robotiker 21. Mär 2012 08:53

AW: wo ist ofstream deklariert?
 
Zitat:

Zitat von zeras (Beitrag 1157588)
Einmal steht das was von fstream.h drin. Das habe ich schon in fstream geändert. Nun wird aber immer ofstream angemeckert.

Die Verwirrung dürfte daher rühren, dass dein Code etwas älteres C++ ist. Die Header mit dem .h sind aus der Zeit vor dem (1998er-) ISO-Standard. Das waren zeichenbasierte Streams, die neueren sind stringbasiert. Die Schnittstellen der Klassen dürften weitestgehend kompatibel sein, aber es gibt da sicher ein paar feine Unterschiede.

zeras 21. Mär 2012 18:02

AW: wo ist ofstream deklariert?
 
Zitat:

Zitat von Robotiker (Beitrag 1157675)

Die Verwirrung dürfte daher rühren, dass dein Code etwas älteres C++ ist. Die Header mit dem .h sind aus der Zeit vor dem (1998er-) ISO-Standard. Das waren zeichenbasierte Streams, die neueren sind stringbasiert. Die Schnittstellen der Klassen dürften weitestgehend kompatibel sein, aber es gibt da sicher ein paar feine Unterschiede.

Ja, der Code scheint schon alt zu sein.
Würde es da was bringen, wenn ich mir Visual C++ 6 zulege? Bei ebay gibt es günstige Bücher, wo das Programm mit beiliegt. Vielleicht würde ich da eines kaufen.

Robotiker 22. Mär 2012 07:42

AW: wo ist ofstream deklariert?
 
Hallo,

Zitat:

Zitat von zeras (Beitrag 1157824)
Ja, der Code scheint schon alt zu sein.

Dann werden wahrscheinlich alle VC++ Versionen ab 2002 und alle C++ Builder Versionen ganz ähnliche Fehler melden.

Zitat:

Zitat von zeras (Beitrag 1157824)
Würde es da was bringen, wenn ich mir Visual C++ 6 zulege?

:shock: :pale: Uggs, so eine Frage in einem Delphi-Forums. :twisted:
Die Frage ist, was man da kriegt. Das Teil hatte 6 Service-Packs und stellt damit immer noch XE2 locker in den Schatten. Wirklich benutzen kann man es erst von SP3 an.

Normalerweise sollten aber alle diese Unterschiede, wenn man sich halbwegs in C++ auskennt, behebar sein. Ich habe schon mal Code von Borland C++ 4.52 (1994) nach VC++ 2008 portiert, das ist nicht so schwierig.

Wenn das kein Code ist, der Bibliotheken wie die MFC verwendet, sollte das übrigens auch mit der VC10 Express-Version gehen.

BUG 22. Mär 2012 14:13

AW: wo ist ofstream deklariert?
 
Ich bin immer noch der Meinung, dass es am Namespace liegt. <fstream> legt die Klassen afaik in den Namespae std, "fstream.h" aber nicht.
Zitat:

Zitat von BUG (Beitrag 1157624)
Ist der richtige Namespace (std?) eingebunden?
Code:
using namespace std;


Robotiker 22. Mär 2012 14:26

AW: wo ist ofstream deklariert?
 
Ja, das sollte hinein.

Aber es sind, wie schon gesagt, nicht die exakt gleichen Klassen. Jedenfalls bei neueren Compilern, wo es gar kein fstream.h mehr gibt.

In der Übergangszeit hat man in der Tat in manchen Implementierungen in fstream einfach fstream.h innerhalb eines Namespaces inkludiert.

zeras 22. Mär 2012 19:29

AW: wo ist ofstream deklariert?
 
Zitat:

Zitat von Robotiker (Beitrag 1157875)

Dann werden wahrscheinlich alle VC++ Versionen ab 2002 und alle C++ Builder Versionen ganz ähnliche Fehler melden.

Zitat:

Zitat von zeras (Beitrag 1157824)
Würde es da was bringen, wenn ich mir Visual C++ 6 zulege?

:shock: :pale: Uggs, so eine Frage in einem Delphi-Forums. :twisted:

Wenn das kein Code ist, der Bibliotheken wie die MFC verwendet, sollte das übrigens auch mit der VC10 Express-Version gehen.

Ich möchte den Code nur von C++ nach Delphi portieren. Und da ich von C++ nicht viel Ahnung habe, wollte ich durch die Routinen debuggen und schauen, was diese machen.
Ich arbeite fast ausschließlich in Delphi und das soll auch so bleiben.

Offensichtlich geht es nicht mit den Express Versionen, da es dort keine Bibs wie stdafx.h etc. gibt.

zeras 22. Mär 2012 19:39

AW: wo ist ofstream deklariert?
 
Nun habe ich using namespace std eingebunden, aber die Fehlermeldungen hören nicht auf. Jetzt kommt beispielsweise error 'sh_read': Ist kein Element von 'std::basic_filebuf<_Elem,_Traits>'. Was immer das auch heißen mag.
Wenn ich die richtige C++ Version hätte, dann dürften doch keine Fehlermeldungen kommen. Das war mein Ziel. Erst mal alles compilieren und dann die Funktionen durchsteppen und dann in Delphi nachbauen.
Vielleicht kann ich eine Version 6 bei ebay kaufen und dann geht es??

Robotiker 23. Mär 2012 07:27

AW: wo ist ofstream deklariert?
 
Ok,

dass ist das, was ich vermutet habe.

Die Vererbungshierarchie hat sich geändert, Parameter haben sich von char* nach std::basic_string<T> geändert usw.

Die aktuelle Struktur ist hier gut zu sehen
http://www.cplusplus.com/reference/iostream/
Da die alte seit mittlerweile 14 Jahren obsolet ist, wird das mit der Doku schwierig.

sh_read klingt nach einem Implementierungsdetail einer Library eines bestimmten Compilers. Ist mir noch nicht begegnet.

Könnte kompliziert werden, das nach Delphi 5 umzusetzen. Irgendwie bist du ein Jahrzehnt zu spät dran.

zeras 23. Mär 2012 17:19

AW: wo ist ofstream deklariert?
 
Zitat:

Zitat von Robotiker (Beitrag 1158072)

Könnte kompliziert werden, das nach Delphi 5 umzusetzen. Irgendwie bist du ein Jahrzehnt zu spät dran.

Danke für die Info.
Ich möchte ja nur einige Teile nach Delphi 5 umsetzen. Dazu wollte ich das Projekt unter C++ zum Laufen bekommen, um dann zu schauen, wie das gemacht ist. Das Ergebnis kenne ich so ungefähr, wollte aber auf Nummer sicher gehen.
Meine Frage steht dann nach wie vor. Wenn ich Visual C++ 6 bei ebay kaufe, dann versuche, das Programm zum Laufen zu bekommen, dann die entsprechenden Routinen in Delphi umsetzen und dann C++ wieder löschen. Das wäre meine Idee, aber erst mal muss ich es compilieren können.

Robotiker 24. Mär 2012 11:52

AW: wo ist ofstream deklariert?
 
Bist du denn sicher, das der Code ursprünglich mit VC6 geschrieben wurde ? Gibt es da vielleicht *.dsw oder *.dsp Dateien, das wäre das damalige Projektformat.

Je nachdem wie der Code genau aussieht, halte ich aber weiterhin die Verwendung eines neueren Compilers für nicht ausgeschlossen.

Deine Fehlermeldung kommt von dem hier:
http://msdn.microsoft.com/en-us/libr...=vs.60%29.aspx
dazu findet Google verschiedene Threads
http://forums.codeguru.com/showthread.php?t=351866
http://stackoverflow.com/questions/4...uf-elem-traits
wo es auch heißt
Zitat:

It's no longer available, and even in Visual C++ 6.0 was only there for backward compatibility.
Das scheint alter MS-DOS Dateiattribut-Krempel zu sein, also wirklich altes Zeug. Wenn das auf halbwegs neuen Rechnern laufen soll, muss man das eh umschreiben ...

zeras 24. Mär 2012 13:23

AW: wo ist ofstream deklariert?
 
Vielen Dank erst mal für die Infos.

Zitat:

Zitat von Robotiker (Beitrag 1158280)
Bist du denn sicher, das der Code ursprünglich mit VC6 geschrieben wurde ?

Nein, da bin ich mir nicht sicher. Derjenige, der das Programm verwaltet, will aber nicht so richtig raus mit den Infos. Er hat mir vor einigen Jahren dann doch mal die Quellen gegeben, aber die Kommunikation ist nicht so einfach.

Zitat:

Zitat von Robotiker (Beitrag 1158280)
Gibt es da vielleicht *.dsw oder *.dsp Dateien, das wäre das damalige Projektformat.

Im Ordner liegen folgende Endungen: .aps, .clw, .cpp, .dsp, .dsw, .ncb, .opt, .plg, .rc

Zitat:

Zitat von Robotiker (Beitrag 1158280)
Das scheint alter MS-DOS Dateiattribut-Krempel zu sein, also wirklich altes Zeug. Wenn das auf halbwegs neuen Rechnern laufen soll, muss man das eh umschreiben ...

Ja, es werden Dateien analysiert und mit den Daten dann wieder eine andere Datei erzeugt. Eigentlich nicht so schwierig, aber es muss 100%ig passen, wenn ich das in Delphi umsetze.

Robotiker 24. Mär 2012 13:45

AW: wo ist ofstream deklariert?
 
Zitat:

Zitat von zeras (Beitrag 1158320)
Im Ordner liegen folgende Endungen: .aps, .clw, .cpp, .dsp, .dsw, .ncb, .opt, .plg, .rc

Gut, das kann nur VC5 oder VC6 sein. In der *.plg sollten eigentlich Compilerausgaben aus der Übersetzung stehen.

Du könntest also versuchen es mit VC6 zu öffnen. Beachte dabei aber die Service-Pack Problematik.

Warum ein neuerer Compiler dass nicht frisst, liegt an dieser alten filebuf-Klasse. Wahrscheinlich ist die noch aus VC4, und VC6 konnte das als letzte Version. Da hab ich mit 1994 aber gut geschätzt. :-D

Kann es sein, dass da einfach dieser Filebuffer benutzt wird, um mit mehreren Streams schreibend und lesend auf die gleiche Datei zuzugreifen ? Dann müsste man die entsprechenden Stellen im Code nur anpassen. VC 10 Express sollte dann völlig reichen.

Neben dem MSDN kannst du z.B. hier nachschauen:
http://en.cppreference.com/w/cpp
www.cplusplus.com/reference/iostream/

Gemein, wie ich bin, werfe ich mal ein paar Literaturstellen in den Raum, sicher eine bessere Investition, als VC6 zu kaufen.

In deutsch für Einsteiger: Breymann "Der C++ Programmierer", Kapitel 10 "Dateien und Ströme", insbesondere 10.6.2 "Lesen und Schreiben in der derselben Datei".

Das absolute Referenzwerk ist zwar auch schon von 1999, dürfte aber ziemlich genau die Thematik beschreiben: Josuttis "The C++ Standard Library", 13.9 "File Access", 13.10 "Connecting Input an Output Streams".

Eventuell dazu als Vorspeise: Gregoire, Solter, Kleper "Professional C++, Second Edition", 15 "Demystifying C++ I/O".

zeras 24. Mär 2012 14:24

AW: wo ist ofstream deklariert?
 
Zitat:

Zitat von Robotiker (Beitrag 1158324)

Gemein, wie ich bin, werfe ich mal ein paar Literaturstellen in den Raum, sicher eine bessere Investition, als VC6 zu kaufen.

Ja das wäre in die Zukunft investiert. Da ich aber nach der Umsetzung C++ nicht wieder brauche, wollte ich nicht in die teuren Bücher investieren. Ich hatte mal Kaiser C++ mit dem Borland C++Builder 3007 gekauft, aber mit dem 2009er Builder bekomme ich es ebenso nicht übersetzt. Da werden die Hürden warscheinlich noch höher liegen.

Nach deinen Infos wird es höchstwahrscheinlich mit VC6 zu compilieren sein.
Ich habe gerade bei Amazon günstig ein Buch gekauft, wo VC6 mit dabei ist.

Danke für deine Bemühungen.

mkinzler 24. Mär 2012 14:26

AW: wo ist ofstream deklariert?
 
Zitat:

ch hatte mal Kaiser C++ mit dem Borland C++Builder 3007 gekauft,
Die sind ihrer Zeit aber weit voraus

Robotiker 24. Mär 2012 14:29

AW: wo ist ofstream deklariert?
 
Zitat:

Zitat von mkinzler (Beitrag 1158330)
Zitat:

ch hatte mal Kaiser C++ mit dem Borland C++Builder 3007 gekauft,
Die sind ihrer Zeit aber weit voraus

Das ist bestimmt schon für ZE2 mit dem HyperMonkey Framework für stunning 4D Brain Apps.

zeras 24. Mär 2012 14:45

AW: wo ist ofstream deklariert?
 
Was so ein Tippfehler alles bewirken kann:-D

zeras 5. Apr 2012 18:58

AW: wo ist ofstream deklariert?
 
Zitat:

Zitat von Robotiker (Beitrag 1158324)

Gut, das kann nur VC5 oder VC6 sein. In der *.plg sollten eigentlich Compilerausgaben aus der Übersetzung stehen.

Du könntest also versuchen es mit VC6 zu öffnen. Beachte dabei aber die Service-Pack Problematik.

So, nun habe ich eine Autoren Edition günstig bei Amazon gekauft und endlich compilieren können. Jetzt kann endlich durchs Programm debuggen.

Danke für die Tipps.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz