Error en evaluación
Me está ocurriendo con relativa frecuencia este error. Trato de dar valor a una variable con una expresión de este estilo:
Código:
AnsiString Nombre, Prueba = "SISTEMA"; Cita:
|
Tiene pinta de ser un error por precedencia de operadores, o posiblemente por la sobrecarga de operadores (¿== quizá?). Prueba a usar paréntesis:
Código:
Nombre = ((Usuario->Text == Prueba) ? "sysdba" : Usuario->Text); Código:
// Asegurándose de que TODO sea AnsiString... Código:
(Nombre = (Usuario->Text == Prueba)) ? "sysdba" : Usuario->Text; |
Gracias por tu contestación. Lo cierto es que no se me ocurrió probar las sugerencias que me haces, pero me llamó la atención que si en vez de poner el literal "sysdba" metía ese valor en una variable, así:
Código:
AnsiString cUser = "sysdba", cClave = "masterkey"; Código:
NombreUser = Usuario->Text == Date().FormatString("yymmdd") ? AnsiString("sysdba") : Usuario->Text.Trim(); |
Cita:
Código:
AnsiString Nombre, Prueba = "SISTEMA"; Nombre = Usuario->Text == Prueba ? AnsiString("sysdba") : Usuario->Text; |
Justo como dice escafandra, el compilador debe elegir entre tres tipos diferentes (como mínimo). Supongo (nunca he usado Borland C++, me quedé con Turbo C/C++ 2.0) que tanto AnsiString como String son clases que definen operadores diversos, entre ellos alguno para combinarlos con char[], y ahí es donde creo que el compilador se hace el lío y no sabe qué hacer.
Yo dejé de usar C++ precisamente por eso: porque muchas veces se daba un caso similar a este (sobre todo si se usaba la vieja de la STL, no sé si con la nueva habrán arreglado algo) y lo mejor que podría pasarte es que no compilara y devolviera un error, porque si compilaba entonces funcionaba pero mal y era complicadísimo encontrar dónde estaba realmente el error. |
Debe ser algo así. Lo cierto es que poniendolo así:
Código:
NombreUser = Usuario->Text == Date().FormatString("yymmdd") ? AnsiString("sysdba") : Usuario->Text.Trim(); |
Hola.
Cita:
Código PHP:
Y del mismo modo funciona si aplicas un moldeo: Código PHP:
Para ejemplificar, la constante "sysdba" es interpretada como char[7], cosa que podes comprobar fácilmente: Código PHP:
|
^\||/ ¡Más claro, agua!
|
La franja horaria es GMT +2. Ahora son las 14:18:19. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi