Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-05-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 907
Poder: 13
Angel.Matilla Va por buen camino
¿Cómo sortear el error Constant expression required?

Buenas a todos. Me está surgiendo un problema que seguro está resuelto pero no soy capaz de encontrar la solución. Necesito definir un vector en base al número de filas que devuelve la ejecución de este query:
Código SQL [-]
SELECT SUM(A.Votos) Votos, A.Partido
FROM Resultados A, Partidos B 
WHERE A.Proceso = :Proceso AND A.Partido = B.Codigo AND A.Municipio = :Codigo
GROUP BY Partido
ORDER BY Votos DESC, Partido
Supongamos que la salida es esta:
Votos Partido
6380 2
4897 3
3018 17
2413 22

Y quiero definir un vector con cuatro índices. Si una vez ejecutado el query trato de definirlo así:
Código:
int Vector[Query->RecordCount];
Al compilar me da el error
Cita:
E2313 Constant expression required
y la ayuda sobre el mensaje, precisamente no ayuda:
Cita:
Las matrices deben ser declaradas con tamaño constante.
Este error generalmente se debe a la falta de ortografía de una constante #define.
¿Alguna sugerencia?
Responder Con Cita
  #2  
Antiguo 18-05-2019
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.704
Poder: 28
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

Igual digo una tontería, pero, ¿no será que "Query->RecordCount" no es una constante y de ahí el error?

Tiene que haber otra forma de declarar el vector (¿hablamos de un array verdad?) y de establecer su tamaño, tal vez usando la función "SetLength".
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #3  
Antiguo 18-05-2019
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 201
Poder: 11
orodriguezca Va por buen camino
Hace algún tiempo que no tabajo en C o C++ o C Builder así que estoy algo oxidado y puede ser que diga una burrada. A mi modo de ver tienes dos opciones: o defines un array lo suficientemente grande para contenedor todos tus resultados, por ejemplo, si sabes que máximo vas a tener 20 partidos y por tanto 20 resultados:

Código Delphi [-]
int Vector[20];  // y entre corchetes solo puede ir una constante

y haces tu bucles hasta el numero real de resultados, por ejemplo:

Código Delphi [-]
for (i=0;Query->RecordCount -1;i++) {
}

O, la segunda opción, trabajar con arreglos (vectores) dinámicos. Esta técnica requiere del uso de punteros y del uso de la funciones malloc y dealloc para manipular el tamaño del vector, pero hasta aquí llega mi memoria y no me atrevo a aportar más. Suerte.
Responder Con Cita
  #4  
Antiguo 18-05-2019
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 1.961
Poder: 14
escafandra Va camino a la famaescafandra Va camino a la fama
Sin entrar en los detalles de tu base de datos, para definir un array en C++ tienes dos formas:

1 Estática:
Código PHP:
int Vector[Constante]; 

2 Dinámica:
Código PHP:
int *Vector = new int[Constante ó Variable]; 

La diferencia es que mientras la reserva de memoria la hace el compilador en la pila en la forma estática, en la dinámica la haces tú. Logicamente el compilador no puede reservar memoria con un valor no constante que variará en tiempo de ejecución.


Saludos.
Responder Con Cita
  #5  
Antiguo 20-05-2019
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.202
Poder: 31
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Tál como te han comentado los compañeros C++ no permite usar una variable para definir el tamaño de un arreglo estático.

La biblioteca estándar de C++ te brinda otra opción (vector):
Código PHP:
...
#include <vector>

...
{
  
std::vector<intvec(Query->RecordCount);
  
int n 10;
...
  
vec.resize(n);
... 
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 20-05-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 907
Poder: 13
Angel.Matilla Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Tál como te han comentado los compañeros C++ no permite usar una variable para definir el tamaño de un arreglo estático.

La biblioteca estándar de C++ te brinda otra opción (vector):
¡Perfecto! Muchas gracia a todos por vuestra ayuda. Lo mio es uno de los problemas de haber pasado de programar en Clipper a hacerlo en C++ sin haber pasado por C estándar; son muchas las carencias que tengo con temas como este.
Responder Con Cita
  #7  
Antiguo 20-05-2019
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 1.961
Poder: 14
escafandra Va camino a la famaescafandra Va camino a la fama
vector no es del C estándar sino C++ estándar. Se trata de un Template, una clase plantilla.

Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ERROR: Data Type mismatch in criteria expression El Mike Conexión con bases de datos 7 01-12-2008 22:22:46
message de error dpb constant (0) is unknown madmai Conexión con bases de datos 0 10-07-2008 07:20:59
Error Field Value Required Edgtho Conexión con bases de datos 3 23-06-2008 22:37:20
Error: Type mismatch in expression gusanita Varios 11 28-01-2006 18:12:17
Error al asignar Expression a QRexpr Renees Impresión 1 18-10-2005 20:34:06


La franja horaria es GMT +2. Ahora son las 18:02:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi