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: 5714
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 ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
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: 5714
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 ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
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