Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Vector / Matriz dinámico

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Vector / Matriz dinámico Responder citando

En un formulario que uso para imprimir un informe creado con QR necesito definir unos vectores de forma dinámica. Uno de ellos lo hace bien, pero el otro no. Estoy usando este código:
En .h:
Código:
class TfIndPer : public TForm
{
__published:   // IDE-managed Components
[...]
private:   // User declarations
public:      // User declarations
     __fastcall TfIndPer(TComponent* Owner);
     int nItem, **nSitua, *nForma;
     TStringList *slSitua, *slSexo, *slForma;
};
//---------------------------------------------------------------------------
extern PACKAGE TfIndPer *fIndPer;

Y en .cpp:
Código:
slSitua = new TStringList();
fPersona->Auxiliar->Close();
fPersona->Auxiliar->SQL->Text = "SELECT Literal FROM Instalacion WHERE Etiqueta = 'Situacion' ORDER BY Valor";
fPersona->Auxiliar->Open();
for (; !fPersona->Auxiliar->Eof; fPersona->Auxiliar->Next())
     slSitua->Add(fPersona->Auxiliar->FieldByName("Literal")->AsString);

nSitua = new int *[slSitua->Count];
for (nItem = 0; nItem <slSitua>Count; nItem ++)
     nSitua[nItem] = new int[slSexo->Count];

slForma = new TStringList();
fPersona->Auxiliar->Close();
fPersona->Auxiliar->SQL->Text = "SELECT Literal FROM Instalacion WHERE Etiqueta = 'ForPago' ORDER BY Valor";
fPersona->Auxiliar->Open();
for (; !fPersona->Auxiliar->Eof; fPersona->Auxiliar->Next())
     slForma->Add(fPersona->Auxiliar->FieldByName("Literal")->AsString);

nForma = new int[slForma->Count];

El primero (nSitua) me lo crea bien porque al generar el listado salen los totales que deben salir pero el segundo (nForma) sólo me coge uno de los posibles valores. ¿Qué estoy haciendo mal?
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Yo no veo que hagas algo mal.
nSitua es un array de punteros tipo int, a cada elemento le asignas un array de enteros.

nForma es un simple array de enteros bien creado.

Lo que no veo es la asignación de los valores de cada entero tanto en nSitua como en nForma.

Recuerda que lara liberar nSitua deberás liberar cada elemento de segundo nivel y luego el array de punteros.


Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias por contestar
escafandra escribió:
Lo que no veo es la asignación de los valores de cada entero tanto en nSitua como en nForma.

El código que puse antes está en el OnCreate. Las asignaciones las hago así en el OnStartPage:
Código:
for (int nRow = 0; nRow < slSitua->Count; nRow ++)
     for (int nCol = 0; nCol < slSexo->Count; nCol ++)
          nSitua[nRow][nCol] = 0;

for (int nCol = 0; nCol < slSexo->Count; nCol ++)
     nForma[nCol] = 0;

Y luego, cada vez que imprimo una banda en el OnBeforePrint:
Código:
nSitua[fPersona->Query->FieldByName("Situacion")->AsInteger - 1][fPersona->Query->FieldByName("Sexo")->AsInteger] ++;
if (fPersona->Query->FieldByName("SitAfi")->AsInteger == 1)
     nForma[fPersona->Query->FieldByName("ForPago")->AsInteger - 1] ++;

No sé si es porque estoy acostumbrado, pero en otros casos cuando depuro un programa y me encuentro con un vector de este tipo, pero definido desde el principio (por ejemplo int nForma[3]) y veo su contenido lo veo más o menos así:
Cita:
{0, 0, 0}

y ahora veo un único dato.
escafandra escribió:
Recuerda que lara liberar nSitua deberás liberar cada elemento de segundo nivel y luego el array de punteros.

La liberación la hago así:
Código:
for (nItem = 0; nItem < slSitua->Count; nItem ++)
     delete [] nSitua[nItem];

delete [] nSitua;
delete [] nForma;

_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Ya está aclarado. Tenías razón: la definición y la carag se hacían bien. El error estaba en cómo recuperaba los datos y es que estaba usando mal los índices. Embarassed
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.