Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/11/2012, 16:18
Avatar de paula23andrea
paula23andrea
 
Fecha de Ingreso: noviembre-2012
Mensajes: 38
Antigüedad: 11 años, 11 meses
Puntos: 1
Pregunta Problema con árboles binarios y clases

Buenas tardes, es la primera vez que uso el foro :)
Quisiera preguntar sobre el error "No matching function for call to.." realmente no encuentro el error, cuando solo intento declarar en el main una dato tipo Nodo (que es el nombre de la clase)...
Aquí está el código, lo dejo completo por si hay algún error diferente.
#include <iostream>

using namespace std;

class Nodo
{
public:

//Nodo(const int dat, Nodo *izq=NULL, Nodo *der=NULL) :
// dato(dat), izquierdo(izq), derecho(der) {}

Nodo(const int dat )
{
dato=dat;
Nodo *izquierd=NULL;
Nodo *derecho=NULL;
}

int dato;
Nodo *izquierdo;
Nodo *derecho;
Nodo *raiz;
Nodo *actual;

void Insertar(const int dat);
bool Vacio(Nodo *r);
void recorre(void (*func)(int&) , Nodo *nodo=NULL, bool r=true);
void Mostrar(int&);

};


bool Nodo::Vacio(Nodo *r)
{
return r==NULL;
}

void Nodo::Insertar(const int dat)
{
Nodo *padre = NULL;

actual = raiz;
// Buscar el int en el árbol, manteniendo un puntero al nodo padre
while(!Vacio(actual) && dat != actual->dato) {
padre = actual;
if(dat > actual->dato) actual = actual->derecho;
else if(dat < actual->dato) actual = actual->izquierdo;
}

// Si se ha encontrado el elemento, regresar sin insertar
if(!Vacio(actual)) return;
// Si padre es NULL, entonces el árbol estaba vacío, el nuevo nodo será
// el nodo raiz
if(Vacio(padre)) raiz = new Nodo(dat);
// Si el int es menor que el que contiene el nodo padre, lo insertamos
// en la rama izquierda
else if(dat < padre->dato) padre->izquierdo = new Nodo(dat);
// Si el int es mayor que el que contiene el nodo padre, lo insertamos
// en la rama derecha
else if(dat > padre->dato) padre->derecho = new Nodo(dat);
}

void Nodo::recorre(void (*func)(int&), Nodo *nodo, bool r)
{
if (r) nodo =raiz;
func(nodo->dato);
if(nodo->izquierdo) recorre(func, nodo->izquierdo, false);
if(nodo->derecho) recorre(func, nodo->derecho, false);
}

void Mostrar(int &d)
{
cout << d << ",";
}

int main()
{
Nodo a;

a.Insertar(100);
a.Insertar(50);
a.Insertar(30);
a.Insertar(10);
a.Insertar(40);
a.Insertar(60);
a.Insertar(55);
a.Insertar(150);
a.Insertar(120);
a.Insertar(160);
a.Insertar(180);

cout<<"Recorrido: "<<endl;
a.recorre(Mostrar);

system("pause");
}

tengo dos modelos de constructor, y con ambos pasa lo mismo :(
"No matching function for call to 'Nodo::Nodo()

Agradezco su orientación, llevo varias horas con esto D: