| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 24 May, 2016 6:43 pm Asunto: Vector / Matriz dinámico |
|
|
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 |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mar 24 May, 2016 11:50 pm Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 25 May, 2016 8:44 am Asunto: |
|
|
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í:
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
|