Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: vazquinhos en 19 Septiembre 2012, 11:01 AM

Título: Problema con punteros.
Publicado por: vazquinhos en 19 Septiembre 2012, 11:01 AM
Tengo un poco de lio con los punteros.
Me he declarado una clase

lifo.h
#include<iostream>

struct Tnodo
{
  Tnodo *ant;
  int datos; 
};
typedef Tnodo *Tpila;

class lifo
{
private:
Tnodo *stack;
public:
//Constructores
lifo(void);
//Mira si la pila esta vacia
bool isEmpty(void);
//Mira el primer elemento de la pila sin quitarlo
int peek(void);
//Elimina el ultimo elemento
void pop(void);
//Inserta un nuevo elemento en la pila
void push(int new_element);
//Muestra por pantalla los elementos de nuestra pila
void print(void);
};


He hecho su implementacion, pero no me hace bien las cosas por tema de acceso a punteros.

lifo.cpp
#include"lifo.h"

//Constructor de la clase lifo
lifo::lifo(void)
{
stack->datos = 0;
stack->ant = NULL;
}

void lifo::push(int new_element)
{
Tnodo *nodo;
nodo->datos = new_element;
if(stack->ant == NULL)
{
nodo->ant = NULL;
}else
{
[s]nodo->ant = stack->ant;[/s]
}
stack->ant = &(*nodo);
}

void lifo::pop(void)
{
if(stack->ant == NULL)
{
std::cout<<"No hay elementos"<<std::endl;
}else
{
Tnodo * aux;
aux->ant = stack->ant;
delete(stack->ant);
stack->ant=aux->ant;
delete(aux);
}
}

int lifo::peek(void)
{
if (stack->ant != NULL)
{
return(stack->ant->datos);
}else
{
std::cout<<"No hay elementos"<<std::endl;
}
}

bool lifo::isEmpty(void)
{
if(stack->ant == NULL)
{
return(false);
}else
{
return(true);
}
}

void lifo::print(void){

Tnodo *aux;
aux->ant = stack->ant;
while(aux->ant != NULL)
{
std::cout<<"|"<<aux->ant->datos<<"|-->";
}
}


y aqui estaba comprobando que  funcionase.
main.cpp
#include"lifo.h"

void main()
{
lifo pila;
pila.push(5);
pila.print();

}


He estado debugando y el problema son los punteros, pero al declarlos dentro de la clase no se como acceder a ellos bien bien o asignarles valores. Algunos puntos que veo criticos.

stack->ant = &(*nodo);
aux->ant->datos;
stack->datos = 0;
delete(stack->ant);

Gracias
Título: Re: Problema con punteros.
Publicado por: do-while en 19 Septiembre 2012, 15:04 PM
¡Buenas!

Veo un problema aqui (no he seguido leyendo) corrijelo y nos cuentas:

Código (cpp) [Seleccionar]

void lifo::push(int new_element)
{
Tnodo *nodo;

//No asignas memoria a nodo, solo asignas a nodo->datos el valor del parametro
nodo->datos = new_element;

if(stack->ant == NULL)
{
nodo->ant = NULL;
}else
{
[s]nodo->ant = stack->ant;[/s]
}

//asignas una direccion de una variable local, ya que no has asignado memoria a nodo
stack->ant = &(*nodo);


¡Saludos!
Título: Re: Problema con punteros.
Publicado por: anonimo12121 en 19 Septiembre 2012, 22:06 PM
claro se te olvida el operador new
Título: Re: Problema con punteros.
Publicado por: vazquinhos en 20 Septiembre 2012, 10:33 AM
He quitado el puntero a Tnodo y ya me funciona la asignacion y todo lo demas, ahora tengo problemas al printar que no me printa nada xdddd.

Gracias!
Título: Re: Problema con punteros.
Publicado por: do-while en 20 Septiembre 2012, 18:35 PM
Cita de: vazquinhos en 20 Septiembre 2012, 10:33 AM
He quitado el puntero a Tnodo

¡¡¡¡¡¿¿¿¿¿?????!!!!!

No visualizo lo que dices. ¿Donde estas almacenando la informacion? ¿Puedes poner el codigo?