Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C++] Dichiarazione senza tipo non consentita

    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:

    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à!
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  2. #2
    spiego meglio il problema visto che Nunkij ha scritto per aiutare me!

    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:
    codice:
    LinkedList * list;
    e qui:
    codice:
    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....

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Ho compilato con VC++ 2003 e DevCpp e non ho avuto alcun errore ...

    Quale compilatore usi?

  4. #4
    devcpp!!

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Hai creato un progetto in cui hai inserito i due file .h ?

  6. #6
    sì esatto!
    Ma il problema potrebbe esser stato risolto aggiungendo
    codice:
    class LinkedList;
    nel Tree.h!
    Solo che ora dà Linker Error sul parametro SIZE della LinkedList....
    Forse "static" non funziona come speravo....

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.