Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   ¿Cómo sortear el error Constant expression required? (https://www.clubdelphi.com/foros/showthread.php?t=93940)

Angel.Matilla 18-05-2019 10:06:34

¿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?

dec 18-05-2019 12:12:50

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".

orodriguezca 18-05-2019 18:06:44

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.

escafandra 18-05-2019 23:02:36

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.

ecfisa 20-05-2019 00:14:02

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 :)

Angel.Matilla 20-05-2019 09:43:02

Cita:

Empezado por ecfisa (Mensaje 532073)
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.

escafandra 20-05-2019 15:26:09

vector no es del C estándar sino C++ estándar. Se trata de un Template, una clase plantilla.

Saludos.


La franja horaria es GMT +2. Ahora son las 11:34:15.

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