Programación General > C++ Builder

 Paso Vector por refernecia

(1/1)

neg1414:
Buenas..

  MI problema es el siguiente Tengo dos clases : clase1, Clase2

  En la primera clase creo un array booleano de 3 elementos


--- Citar ---
 Clase1
 {
 bool VectorOPadre[3];
 }

--- Fin de la cita ---

  Este vector lo paso como parametro a un procedimiento de la clase2

--- Citar --- Clase2
 {
  ProcedEnClase2(VectorPadre);
 }

--- Fin de la cita ---
 
  En la clase 2  el procedimiento recibe el vectorPadre como parametro,lo modifica y al ser un paso por referencia esos cambios se plasman en VectorPadre una vez vuelvo a Clase1;


--- Citar --- Clase2
 {
     ProcedEnClase2(bool Vect[]);
      {
         Vect[0]=true;
         Vect[1]=true;
         Vect[2]=true;
      }
}
--- Fin de la cita ---

Hasta aqui todo bien mi problema surge cuando, En la clase2 trabajo con el vector pasado desde clase1 en otros procediminetos,Obviamente me da un error por que la variable pasada es Local,solo puedo trabajar con ella en el procedimiento que la recibe como parametro..
Como solucion pense en crear una vector booleano variable Goblal

--- Citar ---Clase2
{
   bool VectorGlobal[3]
}
--- Fin de la cita ---

Inicializarlo  apuntando este  a la direccion de comienzo del Vector pasado como referencia (VectorPadre) con lo cual al modificar el VectorGlobal estory modificando VectorPadre.He probado con


--- Citar ---     ProcedEnClase2(bool Vect[]);
      {
         VectorGlobal=Vect;

         VectorGlobal=&Vect

         *VectorGlobal=&Vect
      }
--- Fin de la cita ---


No hay Manera Laguna Idea  Gracias

Eternal Idol:
Y si en lugar de hacer tanta historia usas un puntero ...


--- Código: C++ ---#include <stdio.h> class Clase1{public:  Clase1()  {    VectorOPadre[0] = false;    VectorOPadre[1] = false;    VectorOPadre[2] = false;  }  bool VectorOPadre[3];}; class Clase2{public:  void ProcedEnClase2(bool *Vect)  {    Vect[0]=true;    Vect[1]=true;    Vect[2]=true;    v = Vect;  }  bool *v;}; void main(){  Clase1 p;  printf("%d - %d - %drn", p.VectorOPadre[0], p.VectorOPadre[1], p.VectorOPadre[2]);  Clase2 d;  d.ProcedEnClase2(p.VectorOPadre);  printf("%d - %d - %drn", p.VectorOPadre[0], p.VectorOPadre[1], p.VectorOPadre[2]);} 
Ahi en d.v tenes un puntero a p.VectorOPadre ...

neg1414:
Gracias por Contestar....

Al final lo He Hecho de la siguiente manera



--- Citar --- Clase1
 {
    bool VectorPadre[3]
 
    ProcedEnClase2(VectorPadre);

 }
--- Fin de la cita ---


Código:

--- Citar --- Clase2
 {
   
    //Declaro Variable Global

    bool*  VectorPuntero[3]
   ......................................

   ProcedEnClase2(bool Vect[])
     {
         *VectorPuntero = &Vect[0];
     }

--- Fin de la cita ---


Sea donde sea en la Clase2 si asigno datos a la matriz VectorPuntero
de la forma:
Código:

 
--- Citar ---    (*VectorPuntero)[0]=true;
--- Fin de la cita ---


Estas Modificaciones se veran relflejadas en VectorPadre de la clase1

PosData: No creo que sea " hacer tantas Historias"

Eternal Idol:
Hacelo como quieras para mi seguis haciendo historias, bool* VectorPuntero[3]; es un array de tres punteros a bool ...

Navegación

[0] Índice de Mensajes

Ir a la versión completa