AnsiString mit << >> Operatoren benutzen
-
Hallo,
Ich will eigentlich nur wissen wie ich die Operatoren << und >> dazu bringe auch AnsiString an zu nehmen, also so
AnsiString bla; cin >> bla;Ich glaub das sind nur zwei zeilen, aber ich raff es nicht.
In der Borland Hilfe hab ich das gefunden
ostream& operator << (ostream& os, const AnsiString& arg); istream& operator >> (istream& is, AnsiString& arg);aber da bekomm ich dauernt fehler das er ostream und istream nicht kennt,
obwohl ich alle includes eingebunden hab die die Hilfe gesagt hat.
-
Hallo
Das wird doch in der Builder gut erklärt. Du brauchst nichtt die Definitionen der Operatoren kopieren (ich vermute das du das gemacht hast), sondern einfach die Include-Reihenfolge beachten
#include <iostream> // zuerst #include <vcl.h> // danachDann kannst du darauf folgend AnsiStrings in std-Streams schieben.
bis bald
akari
-
So, das hab ich jetzt gemacht, jetzt kann ich zwar Kompilieren aber funktionieren tuts nicht.
Kannst du da mal drüber schaun und sagen was falsch ist, ich finds nicht,
muß noch dazu sagen das das der erste versuch ist eine Klasse auszulagern.Die Datei TXTTest.h
#ifndef TXTTestH #define TXTTestH class TXT { public: void setFilename(AnsiString); AnsiString getFilename(); private: AnsiString Filename; }; //--------------------------------------------------------------------------- #endifDie Datei TXTTest.cpp
#pragma hdrstop #include <vcl.h> #include "TXTTest.h" void TXT::setFilename(AnsiString name) { Filename = name; } //--------------------------------------------------------------------------- AnsiString TXT::getFilename() { return Filename; } //--------------------------------------------------------------------------- #pragma package(smart_init)und zum schluß main
#include <iostream> #include <vcl.h> #include <conio.h> #include "TXTTest.h" int main() { TXT *Test = new TXT; std::cout << "Geben Sie einen Namen ein: "; AnsiString Datei; std::cin >> Datei; Test->setFilename(Datei); std::cout << "\nSie haben " << Test->getFilename().c_str() << " eingegeben"; _getch(); delete Test; return 0; }Bin echt Dankbar für jede Hilfe
-
jetzt kann ich zwar Kompilieren aber funktionieren tuts nicht.
WAS funktioniert denn nicht?
"Funktioniert nicht" ist keine brauchbare Fehlerbeschreibung ...
-
Hallo
Offenbar gibt mit dem >>-Operator für AnsiString im BCB5 Probleme. Wenn ich deinen Code ausführe, wird die Eingabe nicht vom einem Enter beendet. Falls das das ist was du mit "funktioniert nicht" meinst

Den Fehler kann man jedenfalls beheben, wenn man für die Eingabe std::string benutzt
TXT *Test = new TXT; std::cout << "Geben Sie einen Namen ein: "; std::string Datei; std::cin >> Datei; Test->setFilename(Datei.c_str()); std::cout << "\nSie haben " << Test->getFilename() << " eingegeben"; // Hier brauchst du kein c_str() mehr _getch(); delete Test; return 0;Du solltest also überlegen, ob du bei einem reinen Konsolenprogramm nicht so viel std::string benutzen solltest wie möglich.
Dadurch wird dein Code standardkonformer und du kannst eventuell komplett auf VCL verzichten.bis bald
akari
-
Ja, das war mit funktioniert nicht gemeint, Sorry war nicht meine absicht.
Wo liegt den der Unterschied zwischen String und AnsiString?
Das wird in eine Form eingebaut, ha nur zum Testen der Klasse die Konsole.
Aber Danke für die Hilfe.
Edit -> Hab es gerade mit String ausprobiert, aber auch hier lauft das Programm weiter wenn ich Enter drücke.
Edit2 -> geht doch, sorry tippfehler
-
String == AnsiString
String != std::string
-
Hi,
Versuch doch mal, zum Testen NICHT die Konsole zu nehmen. Einfach ein Fenster mit einem Edit, einem Button und einem Label sollte reichen, dann hättest Du Dir den ganzen Ärger gespart und gleich testen können.
Übrigens, als kleiner Tipp am Rande: guck mal in der Hilfe unter "__property", ich glaube, das könnte Dir gefallen

Viele Grüße,
Christian