[C con Clase] Problema traspaso datos lista abierta

Roland raedura en yahoo.es
Mar Oct 23 16:29:33 CEST 2007


Saludos a todos.

Antes que nada, informar que envío este mensaje como anónimo porque no he podido darme de alta en la lista.

Mi caso es el siguiente:

Dispongo de una lista abierta (llamada listaClase), y una clase (denominada ClaseA), que contiene un método (llamado DevolverDat) que pretende obtener datos de la lista abierta sin tener que solicitarlo a través del "Main".

Pues bien, no consigo realizar el paso de los valores de los miembros de la lista abierta a la ClaseA sin que me de errores.

Si el mencionado paso de valores lo realizo a través de la función principal del programa( el "Main"), no tengo problemas, pero he de hacerlo uno a uno por medio de la instrucción "return".

Incluyo el programita para explicar mi problema y facilitar en su caso la solución que puedan darme:

// **Programa principal**

#include <cstdlib>
#include <iostream>
#include "Clasita.h"
#include "Claselista.h"

using namespace std;

ClaseA Operar;
listaClase Operar;

int main(int argc, char *argv[])
{
    int suma;
    
    Operar.Suma (3, 4);
    cout << "z = " << Operar.Devolverz () << endl;
    Operar.Insertar (12);
    suma = Operar.DevolverDat (Operar);
    cout << "z = " << Operar.DevolverDato () << endl;
    cout << "z = " << suma << endl;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}

// **ClaseA**

#include <cstdlib>
#include <iostream>

using namespace std;

class ClaseA {
   public:
      int z;
      void Suma (int a2, int b2);
      int Devolverz ();
      int DevolverDat (listaClase Operarbis);
      
      friend class ClaseC;
      };

void ClaseA::Suma (int a2, int b2)
{
     z = a2 + b2;
     cout << a2 << "+" << b2 << "=" << z << endl;
}

int ClaseA::Devolverz ()
{
     return z;
}

// Este es el método que creé para manejar directamente los
// datos de la lista abierta. No me funciona.
int ClaseA::DevolverDat (listaClase Operarbis)
{
     int r;
     
     r = Operarbis.DevolverDato();
     return r;
}

// **Lista abierta**

#include <cstdlib>
#include <iostream>

using namespace std;

class nodito {
   public:
    
    nodito(int x, nodito *sig = NULL)
    {
       Posx = x;
       siguiente = sig;
    }
    
   private:
    int Posx;
    nodito *siguiente;
    
   friend class listaClase;
};
 
typedef nodito *pnodito;

class listaClase {
   private:
      pnodito primero;
      pnodito actual;
   public:
      listaClase() { primero = actual = NULL;}
      ~listaClase();
      
      void Insertar(int x);
      void Borrar();
      bool ListaVacia() { return primero == NULL; }
      int DevolverDato ();
      };

listaClase::~listaClase() {
   pnodito aux;
   
   while(primero) {
      aux = primero;
      primero = primero->siguiente;
      delete aux;
   }
   actual = NULL;
}

void listaClase::Insertar(int x)
{
   pnodito anterior;
 
   // Si la lista está vacía
   if(ListaVacia())
   {
      // Asignamos a lista un nuevo nodo de valor y
      // cuyo siguiente elemento es la lista actual                    
      primero = new nodito(x, primero);
      actual = primero;
   }
   else
   {
          anterior = primero;
          while(anterior->siguiente != NULL) anterior = anterior->siguiente;
          anterior->siguiente = new nodito(x, anterior->siguiente);
          actual = anterior->siguiente;
   }
}

void listaClase::Borrar() {
   pnodito aux;
   
   while(primero) {
      aux = primero;
      primero = primero->siguiente;
      delete aux;
   }
   actual = NULL;
}

int listaClase::DevolverDato()
{
     return actual->Posx;
}

Gracias por atender mi mensaje, y ojalá puedan darme una solución.


Más información sobre la lista de distribución Cconclase