Hallo,
ich stelle im Moment meine Projekte von CBuilder6 auf RadStudio2007 um. Dabei ist mir folgendes aufgefallen:
"text = AnsiString(MyVariant)" war im CB6 ok aber im RADStudio2007 wird ein Ambiguity Fehler angezeigt. Also schreibe ich stattdessen "text = MyVariant.operator AnsiString()", das ist ok. Aber "text = (AnsiString)MyVariant" geht nicht, obwohl das doch das gleiche sein sollte, oder? Da habe ich wohl ein kleines Verständnisproblem.
Ein Beispiel macht es deutlich:
Delphi-Quellcode:
Variant v;
AnsiString MeinText;
MeinText = v.
operator AnsiString();
// vom Variant überladener Operator "AnsiString": ok!
MeinText = (AnsiString)v;
// vom Variant überladener Operator "AnsiString"
// - FEHLER:
// [C++ Fehler] Flash_System.cpp(2017): E2015 Ambiguity between '_fastcall System::AnsiString::AnsiString(const System::AnsiString &) at D:\Borland\RAD5\Include\Vcl\dstring.h:70' and '_fastcall System::AnsiString::AnsiString(const wchar_t *) at D:\Borland\RAD5\Include\Vcl\dstring.h:72'
// - sollte das nicht das gleiche sein wie .operator AnsiString() ?
//
MeinText = (AnsiString&)v;
// kein Fehler, aber was soll das?
MeinText = AnsiString(v);
// Konstruktoraufruf vom AnsiString mit Übergabe Variant:
// - Fehler:
// [C++ Fehler] Flash_System.cpp(2017): E2015 Ambiguity between '_fastcall System::AnsiString::AnsiString(const System::AnsiString &) at D:\Borland\RAD5\Include\Vcl\dstring.h:70' and '_fastcall System::AnsiString::AnsiString(const wchar_t *) at D:\Borland\RAD5\Include\Vcl\dstring.h:72'
// - War Im CB6 ok.
- Warum ist (AnsiString)MyVariant nicht das gleiche wie MyVariant.operator AnsiString() ?
- Wie kann ich eine Eindeutigkeit schaffen bei der Verwendung von AnsiString(MyVariant)?
- Warum ist "text = (AnsiString)MyVariant" ein Konstruktoraufruf vom AnsiString (also das gleiche wie "text = AnsiString(MyVariant)") und nicht ein Aufruf des überladenen operators des Variant?
ist doch komisch, oder?
(CB6 und RADStudio2007 auf WinXP)
mfg,
Matmok