Oppure

Loading
23/01/12 10:24
flavio89
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
#include "header.h"
#include <iostream>
#include <cstdlib>

using namespace std;


main () {
        // carico i termini in memoria
    list <string> termini = crea();
}  


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


FUNC
#include "header.h"

list<string> crea () {
    list<string> lista;
    
   l lista.push_back ("Casa");
    lista.push_back ("Tavolo");
    lista.push_back ("Macchina");
    lista.push_back ("Abaco");
    lista.push_back ("Abete");
    lista.push_back ("Computer");
    lista.push_back ("Armadio");
    lista.push_back ("Sedia");
    lista.push_back ("Televisore");
    lista.push_back ("Cane");
    lista.push_back ("Fotografia");
    lista.push_back ("Modem");
    lista.push_back ("Cellulare");
    lista.push_back ("Penna");                                        
    lista.push_back ("Gomma");
    lista.push_back ("Ruota");
    lista.push_back ("Mano");
    lista.push_back ("Piede");
    lista.push_back ("Cd");
    lista.push_back ("Disco");
    lista.push_back ("Calamita");
    lista.push_back ("Pioggia");
    lista.push_back ("Sogno");
    lista.push_back ("Segreto");
    lista.push_back ("Schermo");
    lista.push_back ("Mouse");
    lista.push_back ("Chitarra");
    lista.push_back ("Batteria");
    lista.push_back ("Pinza");                                        
    lista.push_back ("Napoli");
    lista.push_back ("Roma");
    lista.push_back ("Milano");
    return lista;
}


CLASS
enum color {red,black};

class RedBlack {
	private:
		string parola;
		RedBlack* parent;
		RedBlack* left,*right;
		color colore;
		RedBlack  ();
        ~RedBlack ();
        
    public:
        RedBlack build ();      // costruisce radice dell' albero, vuoto
        RedBlack root (list <string>);       // inserisce il primo elemento
        void Insert ();
        void Find ();
};


CLASS FUNC
#include "class_RedBlack.h"

RedBlack RedBlack::build () {
    RedBlack nodo;
    nodo = new RedBlack;
    nodo = NULL;
    return nodo;
}

Redblack RedBlack::root (ELENCO termini) {
    RedBlack root;
    root = new RedBlack;
    root.parola = termini.front();  // metto la prima parola dell' elenco come radice
    root.colore = black;
    root->left = NULL;
    root->right = NULL;
    
    return root;
}


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
aaa
23/01/12 10:40
nessuno
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à.
23/01/12 10:49
flavio89
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

#include <string>
using namespace std;
list <string> crea();

aaa
23/01/12 11:14
flavio89
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
#include "header.h"
enum color {red,black};

class RedBlack {
	private:
		string parola;
		RedBlack* parent;
		RedBlack* left,*right;
		color colore;
		RedBlack  ();
        ~RedBlack ();

    public:
        RedBlack build () ;      // costruisce radice dell' albero, vuoto
        RedBlack root (ELENCO);       // inserisce il primo elemento
        void Insert ();
        void Find ();

};



class_func
#include "class_header.h"

RedBlack RedBlack::build () {
    RedBlack* nodo;
    nodo = new RedBlack;
    nodo = NULL;
    return *nodo;
}

RedBlack RedBlack::root (ELENCO termini) {
    RedBlack* root;
    root = new RedBlack;
    root->parola = termini.front();  // metto la prima parola dell' elenco come radice
    root->colore = black;
    root->left = NULL;
    root->right = NULL;

    return *root;
}



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".
aaa
23/01/12 11:21
nessuno
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à.
23/01/12 11:26
flavio89
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
aaa