[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