Ayuda herencia nodos trie
Publicado por Manuel (1 intervención) el 11/04/2010 21:05:09
Hola a tod@s, hace unas semanas que me estoy volviendo loco con el diseño de un árbol Trie y no consigo que me salga. Mis conocimientos en herencia son bastante pobres y les agradecería que me echaran una mano con las clases NodoTrie.
Tengo dos tipos de nodos, uno con enlaces y otro con información. He creado una clase general (NodoTrie) y luego dos subclases que heredan de la primera (NEnlaces y NInfo).
¿Alguién me podría decir como tengo que hacer la función el .h para que me funcione la función buscar?
Esto es lo que tengo:
typedef enum {LNK,INFO} TipoNodo;
class NodoTrie {
private:
TipoNodo tipo;
public:
NodoTrie(TipoNodo tn);
NodoTrie *buscar(char *, int);
.......
};
class NodoLNK:public NodoTrie {
private:
NodoTrie *final;
NodoTrie *lpalabras[NUM_ENLACES];
public:
NodoLNK();
~NodoLNK();
};
class NodoINF: public NodoTrie {
protected:
char *palabra;
public:
NodoINF(char *sPal);
};
Y EN EL .CPP:
==============
NodoTrie* NodoTrie::buscar(char *sPal, int p){
if (tipo == LNK) {
NodoLNK *ND = (NodoLNK *) this;
if (strlen(sPal)>p) {
int iLetra=PosLetra(sPal[p]);
if (ND->lpalabras[iLetra] != NULL)
return ND->lpalabras[iLetra]->buscar(sPal, p+1);
}
}
else {
NodoINF *NI = (NodoINF *) this;
if (strcmp(sPal, NI->palabra)==0) return this;
}
return NULL;
}
LOS ERRORES QUE ME DAN SON:
'NodoTrie*NodoLNK::lpalabras[10] is private within this context
Creo que es porque utilizo lpalabras que está definida en NodoLNK en una
función de NodoTrie
¿Debería crear un método buscar para cada tipo de nodo?¿Como lo hago?
¿Como lo llamo desde el NodoTrie?
Estoy hecho un lío, por favor échenme una mano
Gracias, muchas gracias
Tengo dos tipos de nodos, uno con enlaces y otro con información. He creado una clase general (NodoTrie) y luego dos subclases que heredan de la primera (NEnlaces y NInfo).
¿Alguién me podría decir como tengo que hacer la función el .h para que me funcione la función buscar?
Esto es lo que tengo:
typedef enum {LNK,INFO} TipoNodo;
class NodoTrie {
private:
TipoNodo tipo;
public:
NodoTrie(TipoNodo tn);
NodoTrie *buscar(char *, int);
.......
};
class NodoLNK:public NodoTrie {
private:
NodoTrie *final;
NodoTrie *lpalabras[NUM_ENLACES];
public:
NodoLNK();
~NodoLNK();
};
class NodoINF: public NodoTrie {
protected:
char *palabra;
public:
NodoINF(char *sPal);
};
Y EN EL .CPP:
==============
NodoTrie* NodoTrie::buscar(char *sPal, int p){
if (tipo == LNK) {
NodoLNK *ND = (NodoLNK *) this;
if (strlen(sPal)>p) {
int iLetra=PosLetra(sPal[p]);
if (ND->lpalabras[iLetra] != NULL)
return ND->lpalabras[iLetra]->buscar(sPal, p+1);
}
}
else {
NodoINF *NI = (NodoINF *) this;
if (strcmp(sPal, NI->palabra)==0) return this;
}
return NULL;
}
LOS ERRORES QUE ME DAN SON:
'NodoTrie*NodoLNK::lpalabras[10] is private within this context
Creo que es porque utilizo lpalabras que está definida en NodoLNK en una
función de NodoTrie
¿Debería crear un método buscar para cada tipo de nodo?¿Como lo hago?
¿Como lo llamo desde el NodoTrie?
Estoy hecho un lío, por favor échenme una mano
Gracias, muchas gracias
Valora esta pregunta
0