Toon posts:

[c++] Ansistring naar textbestand

Pagina: 1
Acties:
  • 101 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben (voor school) bezig met een form waarin informatie over een boek word ingevoerd en wat dan weer word opgeslagen als een xml document (dus volgens de xml opmaak).

wanneer ik uit een Tedit->Text iets wil wegschrijven (via fstream). Krijg ik de volgende foutmelding:
code:
1
  [C++ Error] Unit1.cpp(66): E2094 'operator<<' not implemented in type 'fstream' for arguments of type 'AnsiString'


dit is dus bij deze code:
C++:
1
2
3
4
5
6
7
8
9
10
11
{
fstream XMLFile;
XMLFile.open ("File1.XML", ios::out);
if (XMLFile.is_open())
{
XMLFile << "<BOEK>\n";
XMLFile << "\t <TITEL>";
XMLFile << InvTitel->Text;
// blabla nog meer
XMLFile.close();
}}


Hoe moet ik anders die AnsiString wegschrijven.
kan dat met een andere opperator.
of moet ik dit op een andere manier weggscrijven.
ps. ik ben nog een n00b in c++

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 00:01

Creepy

Tactical Espionage Splatterer

Zet het om naar een std::string.
Ansistring klinkt als Borland C++ Builder. De Ansistring is geen standaard C++ maar is een class uit he VCL framework. Zet die InvTitel->Text om naar een std::string en << zal dan wel werken.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

En als je per se met Ansistrings wil werken, dan kun je kijken of je de fstream klasse kan extenden en daarin een operator<< methode maken.

Maar Creepy's methode lijkt me een stuk eenvoudiger. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
moet ik om van die AnsiString een std::string te maken nog wat speciaals doen?
als ik gewoon een variabele maak die ik declareer als std::string
en die dan vul met InvTitel->Text krijg ik de volgende melding:
code:
1
  [C++ Error] Unit1.cpp(42): E2285 Could not find a match for 'string::operator =(AnsiString)'



en om nou die fstream aan te passen, lijkt me niet verstandig als ik dat ga doen :P

  • ~Destructor()
  • Registratie: Mei 2000
  • Niet online
Je kan daar waarschijnlijk wel de .c_str() voor gebruiken:

code:
1
2
    char* S = Edit1->Text.c_str();
    Edit2->Text = strlen(S);


Zie ook hier.

Nothing is impossible


Verwijderd

Topicstarter
Thnx.
Ik kan gewoon naar een textbestand schrijven maar dan moet ik gewoon dit typen
XMLFile << InvTitel->Text.c_str();

dus voorbeeld van boven word:
C++:
1
2
3
4
5
6
7
8
9
10
11
{
fstream XMLFile;
XMLFile.open ("File1.XML", ios::out);
if (XMLFile.is_open())
{
XMLFile << "<BOEK>\n";
XMLFile << "\t <TITEL>";
XMLFile << InvTitel->Text.c_str();
// blabla nog meer
XMLFile.close();
}}

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Lijkt me een vrij slechte site.
Since AnsiString is a class with its own constructor, you can also declare its variable with empty parentheses, which would be calling the class’ constructor. Here is an example:
C++:
1
AnsiString City();
Alleen is dat geen variable declaratie, maar een functie declaratie (zonder parameters)

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:30

.oisyn

Moderator Devschuur®

Demotivational Speaker

-NMe- schreef op woensdag 26 oktober 2005 @ 20:56:
En als je per se met Ansistrings wil werken, dan kun je kijken of je de fstream klasse kan extenden en daarin een operator<< methode maken.
fstream extenden lijkt me een beetje onhandig, dan werkt het alleen maar op je eigen instanties van die fstream classes. Beter maak je gewoon een globale operator << die werkt op een ostream, dan kun je het overal voor gebruiken :)

C++:
1
2
3
4
std::ostream & operator << (std::ostream & out, const AnsiString & s)
{
    return out << s.c_str();
}

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • schoene
  • Registratie: Maart 2003
  • Laatst online: 14:18
Dit is zelfs voorzien. Uit de help van AnsiString:

Note: To utilize the C++ streaming operators (<< and >>) with AnsiString, you must use #include <iostream> or #define VCL_IOSTREAM before #include <dstring.h>. This occurs automatically if you include vcl.h or system.h and defines the operators as follows:

code:
1
2
3
ostream& operator << (ostream& os, const AnsiString& arg);

istream& operator >> (istream& is, AnsiString& arg);
Pagina: 1