PDA

Visualizza la versione completa : [C++] Dichiarazione senza tipo non consentita


Nunkij
16-05-2007, 12:07
Salve a tutti, nel mio programma vado a definire una variabile di tipo di una classe precedentemente definita in un file .h e ricevo l'errore del titolo.
Questo mi capita solo in un file (altri file sono compilati tranquillamente).
Vi incollo il codice:





lista.h:

#ifndef LISTA_H
#define LISTA_H

#include <iostream>
#include <fstream>
#include <string>
#include "tree.h"

template<class Value>
class Tree;

class LinkedList{
private:
struct nodolista{
char*Array;
nodolista*next;
static int size;
//costruttore
nodolista() {
next = 0;
Array = new char[size];
}
};
nodolista*head, *tail;
friend class Tree<char>;

public:
LinkedList();
LinkedList(int N);
void ListInsert(char el);
void ArrayInsert(char el, int i, nodolista*ptr);
void CopiaNodo(nodolista*ptr);
LinkedList(const LinkedList& rhs);
LinkedList& operator=(const LinkedList& rhs);
void deletelist();
~LinkedList();
void Stampa();
void ClearArray(nodolista*ptr);

};
#endif

tree.h

#include <iostream>
#include <fstream>
#include <string>
#include "lista.h"

template<class Value>
class Tree;

template<class Value>
class Node{
private:
Node * lchild; //puntatore alla lista dei figli
Node * rsibling; //puntatore al fratello destro
Node * lbrother; //puntatore al fratello sinistro
Node * father; //puntatore al padre
Value value;
// costruttore di default
Node(const Value&v) {
lchild = rsibling = father = lbrother = 0;
value = v;
}
//altro costruttore
Node(Node*lc, Node*rs, Node*lb, Node*f, const Value&v) {
lchild = lc;
rsibling = rs;
lbrother = lb;
father = f;
value = v;
}
friend class Tree<Value>;
};

template<class Value>
class Tree{
Node<Value> * root;

LinkedList * list; // riga dove viene dato l'errore


public:
// costruttore di default
Tree();
//altro costruttore
Tree(const Value& v);
// distruttore
~Tree();
void cancella(Node<Value> *nodo);
//costruttore di copia
Tree(const Tree& rhs);
Tree& operator=(const Tree& rhs);
Node<Value>* copia(Node<Value>* a);
Node<Value>* insert(Node<Value> * a, Node<Value> * b, Value valore);
Node<Value>* insertBrother(Node<Value> * a, Node<Value> * b, Value valore);
Node<Value>* SearchLenght(int wordlenght);
void VerificaSequenza(std::string sequenza);
void CreaNodoDimensione(std::string * V, int N);
void CreaNodoValore(Node<Value>*ptr, std::string stringa, int j);
void Ricerca(Node<Value>*ptr, std::string bit, int i, int maxLenght, LinkedList* list);
//attenzione alla separazione interfaccia-implementazione! I metodi pubblici non dovrebbero
//prendere o restituire puntatori => fai metodi privati e i corrispondenti metodi pubblici

};



#endif




Qualcuno sa aiutarmi? Grazie a chi mi risponderà!

Mikychan
17-05-2007, 11:21
spiego meglio il problema visto che Nunkij ha scritto per aiutare me! :zizi:

Allora...
Ho creato un albero e una lista...
In pratica ho bisogno che quando visito un albero mi crei una lista con gli elementi che trova!
Quindi ho creato vari metodi di Tree per creare la lista e salvare su di essa quando fa la ricerca!
Il problema però è che da dentro la classe Tree non mi riconosce LinkedList come tipo!
In particolare dà errore qui:

LinkedList * list;
e qui:

void Ricerca(Node<Value>*ptr, std::string bit, int i, int maxLenght, LinkedList* list);

Ma solo in quei 2 punti!
Cioè, dentro Tree.cpp dove fa riferimento a LinkedList non dà alcun errore!
E così anche se creo una lista nel main...
C'è qualche problema con gli INCLUDE tra Tree.h e Lista.h??
Non capisco....

oregon
17-05-2007, 11:45
Ho compilato con VC++ 2003 e DevCpp e non ho avuto alcun errore ...

Quale compilatore usi?

Mikychan
17-05-2007, 12:28
devcpp!! :confused:

oregon
17-05-2007, 13:59
Hai creato un progetto in cui hai inserito i due file .h ?

Mikychan
17-05-2007, 19:26
sì esatto!
Ma il problema potrebbe esser stato risolto aggiungendo

class LinkedList;
nel Tree.h!
Solo che ora dà Linker Error sul parametro SIZE della LinkedList....
Forse "static" non funziona come speravo....

Loading