FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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"; Nombre = Usuario->Text == Prueba ? "sysdba" : Usuario->Text; Cita:
|
#2
|
||||
|
||||
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... Nombre = (((AnsiString)(Usuario->Text)) == Prueba) ? (AnsiString)"sysdba" : (AnsiString)(Usuario->Text)); Código:
(Nombre = (Usuario->Text == Prueba)) ? "sysdba" : Usuario->Text; Última edición por Ñuño Martínez fecha: 19-04-2017 a las 14:54:20. Razón: Usé ANSISTRING en vez de AnsiString... Y me di cuenta de otra cosa. |
#3
|
||||
|
||||
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"; NombreUser = Usuario->Text == Date().FormatString("yymmdd") ? cUser : Usuario->Text.Trim(); ClaveUser = Usuario->Text == Date().FormatString("yymmdd") ? cClave : Clave->Text.Trim(); Código:
NombreUser = Usuario->Text == Date().FormatString("yymmdd") ? AnsiString("sysdba") : Usuario->Text.Trim(); ClaveUser = Usuario->Text == Date().FormatString("yymmdd") ? AnsiString("masterkey") : Clave->Text.Trim(); |
#4
|
||||
|
||||
Cita:
Código:
AnsiString Nombre, Prueba = "SISTEMA"; Nombre = Usuario->Text == Prueba ? AnsiString("sysdba") : Usuario->Text; |
#5
|
||||
|
||||
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. |
#6
|
||||
|
||||
Debe ser algo así. Lo cierto es que poniendolo así:
Código:
NombreUser = Usuario->Text == Date().FormatString("yymmdd") ? AnsiString("sysdba") : Usuario->Text.Trim(); |
#7
|
||||
|
||||
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:
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#8
|
||||
|
||||
¡Más claro, agua!
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
TMS Data Modeler Evaluacion | ASAPLTDA | Debates | 0 | 15-06-2014 19:11:49 |
Test de Evaluacion | Elite237 | OOP | 65 | 04-11-2008 10:37:39 |
Sistema de Evaluacion Psicometrica | Elite237 | OOP | 4 | 24-09-2008 18:31:58 |
Intraweb de D2007 es evaluación?? | xander | Varios | 5 | 24-10-2007 20:04:40 |
Migracion BDE a SQLDIRECT evaluacion | ASAPLTDA | Conexión con bases de datos | 0 | 27-11-2004 22:08:12 |
|