Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [c++] Header File
Forum - C/C++ - [c++] Header File

Avatar
flavio89 (Normal User)
Rookie


Messaggi: 26
Iscritto: 07/09/2011

Segnala al moderatore
Postato alle 11:24
Lunedì, 23/01/2012
Salve ragazzi.
Sto lavorando ad un progetto sugli alberi binari red black, ma il problema è che non riesco nemmeno a compilare.

Ho 5 file nel mio progetto : main, header, function, class header e class function

MAIN
Codice sorgente - presumibilmente C++

  1. #include "header.h"
  2. #include <iostream>
  3. #include <cstdlib>
  4.  
  5. using namespace std;
  6.  
  7.  
  8. main () {
  9.         // carico i termini in memoria
  10.     list <string> termini = crea();
  11. }



HEADER
Codice sorgente - presumibilmente C/C++

  1. #include <list>
  2. // crea una lista di base dei termini da inserire nell' albero
  3. list<string> crea ();



FUNC
Codice sorgente - presumibilmente C/C++

  1. #include "header.h"
  2.  
  3. list<string> crea () {
  4.     list<string> lista;
  5.    
  6.    l lista.push_back ("Casa");
  7.     lista.push_back ("Tavolo");
  8.     lista.push_back ("Macchina");
  9.     lista.push_back ("Abaco");
  10.     lista.push_back ("Abete");
  11.     lista.push_back ("Computer");
  12.     lista.push_back ("Armadio");
  13.     lista.push_back ("Sedia");
  14.     lista.push_back ("Televisore");
  15.     lista.push_back ("Cane");
  16.     lista.push_back ("Fotografia");
  17.     lista.push_back ("Modem");
  18.     lista.push_back ("Cellulare");
  19.     lista.push_back ("Penna");                                        
  20.     lista.push_back ("Gomma");
  21.     lista.push_back ("Ruota");
  22.     lista.push_back ("Mano");
  23.     lista.push_back ("Piede");
  24.     lista.push_back ("Cd");
  25.     lista.push_back ("Disco");
  26.     lista.push_back ("Calamita");
  27.     lista.push_back ("Pioggia");
  28.     lista.push_back ("Sogno");
  29.     lista.push_back ("Segreto");
  30.     lista.push_back ("Schermo");
  31.     lista.push_back ("Mouse");
  32.     lista.push_back ("Chitarra");
  33.     lista.push_back ("Batteria");
  34.     lista.push_back ("Pinza");                                        
  35.     lista.push_back ("Napoli");
  36.     lista.push_back ("Roma");
  37.     lista.push_back ("Milano");
  38.     return lista;
  39. }



CLASS
Codice sorgente - presumibilmente C#

  1. enum color {red,black};
  2.  
  3. class RedBlack {
  4.         private:
  5.                 string parola;
  6.                 RedBlack* parent;
  7.                 RedBlack* left,*right;
  8.                 color colore;
  9.                 RedBlack  ();
  10.         ~RedBlack ();
  11.        
  12.     public:
  13.         RedBlack build ();      // costruisce radice dell' albero, vuoto
  14.         RedBlack root (list <string>);       // inserisce il primo elemento
  15.         void Insert ();
  16.         void Find ();
  17. };



CLASS FUNC
Codice sorgente - presumibilmente C++

  1. #include "class_RedBlack.h"
  2.  
  3. RedBlack RedBlack::build () {
  4.     RedBlack nodo;
  5.     nodo = new RedBlack;
  6.     nodo = NULL;
  7.     return nodo;
  8. }
  9.  
  10. Redblack RedBlack::root (ELENCO termini) {
  11.     RedBlack root;
  12.     root = new RedBlack;
  13.     root.parola = termini.front();  // metto la prima parola dell' elenco come radice
  14.     root.colore = black;
  15.     root->left = NULL;
  16.     root->right = NULL;
  17.    
  18.     return root;
  19. }



Praticamente non riesco a linkare questi file tra loro.
In fase di compilazione mi da un error :
expected costructor, distructor ... before '<' token

Non so come risolvere.
Vi ringrazio anticipatamente


C, con te litigo spesso, ma alla fin fine ti voglio bene
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5460
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:40
Lunedì, 23/01/2012
Ci sono tanti problemi ma prima di tutto devi risolvere quelli in CLASS FUNC

In particolare devi fare attenzione a

root e nodo

che allochi con la new ma che NON sono puntatori.

Correggi questo fatto e poi aggiungi anche l'include

#include <string>

dove serve e

using namespace std;

in header.h


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
flavio89 (Normal User)
Rookie


Messaggi: 26
Iscritto: 07/09/2011

Segnala al moderatore
Postato alle 11:49
Lunedì, 23/01/2012
Ti ringrazio per la risposta.
Ora correggo la parte riguardante gli alberi... Però persiste il problema. Non si compila, torna sempre l' errore "expected costructor .... before '<' token" nell' header.h

Codice sorgente - presumibilmente C/C++

  1. #include <string>
  2. using namespace std;
  3. list <string> crea();




C, con te litigo spesso, ma alla fin fine ti voglio bene
PM Quote
Avatar
flavio89 (Normal User)
Rookie


Messaggi: 26
Iscritto: 07/09/2011

Segnala al moderatore
Postato alle 12:14
Lunedì, 23/01/2012
Ho risolto. Ora si compila.
Ho aggiunto al progetto anche i due file sulle classi, corretti come mi hai detto tu. Ora però non so come gestire i prototipi in un header contente una classe

class_header
Codice sorgente - presumibilmente C++

  1. #include "header.h"
  2. enum color {red,black};
  3.  
  4. class RedBlack {
  5.         private:
  6.                 string parola;
  7.                 RedBlack* parent;
  8.                 RedBlack* left,*right;
  9.                 color colore;
  10.                 RedBlack  ();
  11.         ~RedBlack ();
  12.  
  13.     public:
  14.         RedBlack build () ;      // costruisce radice dell' albero, vuoto
  15.         RedBlack root (ELENCO);       // inserisce il primo elemento
  16.         void Insert ();
  17.         void Find ();
  18.  
  19. };



class_func
Codice sorgente - presumibilmente C++

  1. #include "class_header.h"
  2.  
  3. RedBlack RedBlack::build () {
  4.     RedBlack* nodo;
  5.     nodo = new RedBlack;
  6.     nodo = NULL;
  7.     return *nodo;
  8. }
  9.  
  10. RedBlack RedBlack::root (ELENCO termini) {
  11.     RedBlack* root;
  12.     root = new RedBlack;
  13.     root->parola = termini.front();  // metto la prima parola dell' elenco come radice
  14.     root->colore = black;
  15.     root->left = NULL;
  16.     root->right = NULL;
  17.  
  18.     return *root;
  19. }




Ora mi dà ovviamente l' errore undefined reference to build e root perchè mancano i protopi. Li avevo aggiunti a class_header.h ma lì mi diceva che "non è possibile dichiarare fuori dalla classe".


C, con te litigo spesso, ma alla fin fine ti voglio bene
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5460
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 12:21
Lunedì, 23/01/2012
Prima di tutto manca il costruttore

RedBlack::RedBlack()
{
}

e poi cosa è ELENCO?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
flavio89 (Normal User)
Rookie


Messaggi: 26
Iscritto: 07/09/2011

Segnala al moderatore
Postato alle 12:26
Lunedì, 23/01/2012
ELENCO è una typedef di list<string>.

Comunque ora funziona, avevo dimenticato il costruttore; non avevo mai programmato creando file separati purtroppo.

Sei stato gentilissimo e chiarissimo


C, con te litigo spesso, ma alla fin fine ti voglio bene
PM Quote