Originariamente inviato da iguana13
Innanzitutto grazie per la risposta.

- Nel tuo codice, in parser.h non ci sono istruzioni #include per files come parser.cpp, con il corpo delle funzioni. Lo devo mettere? Se no, come fa il compilatore a sapere di includere quei file?
dipende da come la classe parser utilizza gli oggetti delle classi da cui dipende.

se utilizzi gli oggetti per reference o tramite puntatori l'unica cosa di cui il compilatore ha bisogno è una forward diclaration (ripeto è fortemente consigliata perchè nel momento in cui lavorerai in grossi progetti, all'atto di modificare la classe da cui dipendi dovrai ricompilare solo questa, e se il progetto è grosso risparmi anche ore di compilazione).

esempio di forward declaration

class tree;

dovrei vedere il codice di parser.h per capire se puoi utilizzare semplicemente una forward declaration oppure una include.


- In un file con il corpo delle funzioni come parser.cpp, trovo #include "parser.h", ma il preprocessore troverà già definita la macro __PARSER_H__ e quindi non dovrebbe ignorare #include "tree.h" ?

Grazie 1K
No, #ifndef dice
se non è definita __PARSER_H__ allora definisci __PARSER_H__ e includi solo la prima volta il file parser.h con essa includi la prima volta il file tree.h.

differenza tra dichiarazione e definizione
differenza tra dichiarazione e definizione 2° link

sei in visual c++ quindi devi aggiungere al progetto i file *.cpp che definiscono le classi, questo permetterà al linker di trovare le definizioni dei simboli che hai dichiarato negli header files.

Gli errori "undefined reference" sono errori della fase di linking, comunque nei link del messaggio precedente è descritta anche questa fase.

Se il codice è troppo lungo e se vuoi puoi postarmeli in privato.