Einzelnen Beitrag anzeigen

matmok

Registriert seit: 9. Feb 2006
Ort: Köln
22 Beiträge
 
Delphi 2007 Enterprise
 
#1

überl AnsiString operator des Variant; CB6 vs RadStudio2007

  Alt 16. Mai 2008, 11:56
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
  Mit Zitat antworten Zitat