Currency / Variant
-
Hallo allerseits
ich habe eine rekursive Funktion geschrieben, die einen gegeben String Buchstabe für Buchstabe untersucht und dann einen nach diesem String formatierten String ausgibt.
also z.b. "[time][date][text]" ergibt dann "10:15 5.12.2003 Mein Text"
andere Buchstaben werden einfach in den Ausgangsstring übernommen.
Und mit diesen Buchstaben hat BC++ anscheinden ein prob.
Den ich realisiere das so das am Ende der Funktion steht, wobei String = AnsiString, Index = intreturn String[Index] + FormatTrayIconHint(String, ++Index, ZeitStr, DatumStr, TextStr, MaxText);
Allerdings gibt der mir bei dieser Zeile diesen Fehler:
[C++ Fehler] UnitTypes.h(55): E2015 Mehrdeutigkeit zwischen '_fastcall System::operator +(int,const System::Variant &)' und '_fastcall System::operator +(int,const System::Currency &)'
Wieso eigentlich? String[Index] gib doch ein char raus, und den verbind ich mit dem Rest des Strings.
Wenn ich dann
return Currency(String[Index]) + FormatTrayIconHint(String, ++Index, ZeitStr, DatumStr, TextStr, MaxText);
mach, dann kommt bei z.b. so einem FormatStr [time][date][text]bla die Exception: EConvertError, Meldung "
( da kommt nix weiter nur " , net ma ein abschliesendes ")
oder bei Variant: EVariantTypeCastError: Variable des Typs (String) konnte nicht in Typ (Double) konvertiert werden.
bzw: EVariantBadVarTypeError: Ungültiger Variant-TypDer komplete Text, wens interesiert:
AnsiString FormatTrayIconHint(AnsiString String, int Index, AnsiString ZeitStr, AnsiString DatumStr, AnsiString TextStr, int MaxText) { if ( String == NULL ) return '\0'; if ( Index+1 > String.Length() ) return '\0'; switch ( String[Index] ) { case '_': return " " + FormatTrayIconHint(String, ++Index, ZeitStr, DatumStr, TextStr, MaxText); case '[': if ( String.SubString(Index+1, 4) == "time" ) return ZeitStr + FormatTrayIconHint(String, Index+5, ZeitStr, DatumStr, TextStr, MaxText); if ( String.SubString(Index+1, 4) == "date" ) return DatumStr + FormatTrayIconHint(String, Index+5, ZeitStr, DatumStr, TextStr, MaxText); if ( String.SubString(Index+1, 4) == "text" ) { int max; if ( MaxText == -1 ) max = TextStr.Length(); else max = MaxText; return TextStr.SubString(0, max) + FormatTrayIconHint(String, Index+5, ZeitStr, DatumStr, TextStr, MaxText); }; case ']': return FormatTrayIconHint(String, ++Index, ZeitStr, DatumStr, TextStr, MaxText); }; return String[Index] + FormatTrayIconHint(String, ++Index, ZeitStr, DatumStr, TextStr, MaxText); }
-
return String(String[Index]) + FormatTrayIconHint(String, ++Index, ZeitStr, DatumStr, TextStr, MaxText);
Vielleicht fällt dir dabei ja auch auf, dass du den Variablennamen String äusserst unglücklich gewählt hast, da selbiges bereits als typedef für AnsiString deklariert ist.
-
axo deswegen
hab da nicht grad drann gedacht
ok thx
-
Der Variablenname ist nicht die Ursache für die Fehlermeldung, zumindest nicht für diese.
Du versuchst, zu einem char einen (Ansi)String direkt hinzu zu addieren, und das funktioniert (in dieser Richtung) nicht.
-
würd das funken wenn ichs so mach:
return FormatTrayIconHint(String, ++Index, ZeitStr, DatumStr, TextStr, MaxText) + String[Index];
?ich habs inzwischen richtig, aber würd mich trotzdem interesieren