Buenas, tengo problemas para compilar un código que tenía hace tiempo y que diría que antes me funcionaba, no se si lo habré tocado o algo, pero la cosa es que ya no compila xD
El código es simplemente para definir un árbol, dentro de la clase árbol dispongo también de una clase Nodo, anidada de la siguiente forma:
Como veis el árbol es un template. Nodo por estar anidado también puede hacer uso del mismo template.
Debajo de toda esta declaración de árbol están las definiciones de los métodos. Sin embargo el que da problemas es la cabecera de la definición del método "copiar" de Nodo.
Si pongo el código inline no pasa nada (los otros 2 métodos, eliminar e iguales, compilan bien). Sin embargo no soy capaz de "sacarlo" de la definición inline ya que me dice
Arbol.hpp:90: error: expected constructor, destructor, or type conversion before
'*' token
Arbol.hpp:90: error: expected `;' before '*' token
Concretamente la cabecera que uso para la definición, en los casos que si funciona, es esta:
void Arbol<T>::Nodo::eliminar(Nodo* n){ // Igual en "iguales"
Sin embargo la que da el problema es copiar (línea 90 del archivo)
Nodo* Arbol<T>::Nodo::copiar(Nodo* ori) {
He pensado que el error podría estar en que Nodo* no está definido, ya que está dentro del espacio de nombres de arbol, por lo que también he probado:
Arbol<T>::Nodo* Arbol<T>::Nodo::copiar(Nodo* ori) {
con el mismo resultado, sin embargo, si lo elimino del todo (solo dejo el nombre de la función, sin lo que retorna), y al cambiar el error del compilador, me dice que las candidatas son:
candidate is: static Arbol<T>::Nodo* Arbol<T>::Nodo::copiar
Que es justo la segunda que pruebo. ¿Alguien sabe a que puede ser debido este error idiota de compilación? ¿Es que esa función en concreto solo se puede crear inline?