Newsgroup: it.comp.lang.c++
Titolo: compilazione separata, errore del linker

salve a tutti,
sono un mezzo-neofita del cplusplus e mi sono imbattuto in un problema di stile
che ora non posso proprio + ignorare. lavoro in ambiente linux.
quello che ottengo linkando i files oggetto č un "unresolved reference" che si
riferisce ai metodi di un classe che ho scritto.
questo č la struttura generale del mio programma:
"client.cpp"
------------
#include "client.h"
#include "hostinfo.cpp"     (***)
main()
{
 ...
}
"client.h"
----------
#include "hostinfo.h"
#include "bla bla bla..."
/* prototipi delle funzioni di client.cpp */
"hostinfo.h"
------------
#ifndef HOSTINFO_H
#  define HOSTINFO_H
class HostInfo
{
 ...            /* dichiarazione dei metodi e delle variabili di classe */
}
#endif // hostinfo.h
"hostinfo.cpp"
--------------
#include "hostinfo.h"
... HostInfo:: ... /* implementazione dei metodi */
ora... non mi dovrei essere sbagliato a schematizzare :_).
Se compilo con
# g++ client.cpp -o client
va tutto bene ma se provo a togliere la riga (***) dal codice di "client.cpp"
per compilare cosě
# g++ client.cpp -c
# g++ hostinfo.cpp -c
# g++ client.o hostinfo.o -o client
arrivano una miriade di "unresolved reference" come se non si trovasse
l'implementazione dei metodi dichiarati in "hostinfo.h".
io vorrei poter compilare separatemente e linkare dopo anche in vista di un
Makefile e del fatto che obiettivamente includere un ".cpp" non č
stilisticamente bello :-) come devo fare?
grazie a chiunque volesse aiutarmi
-- 
                            Strozzi.F4Bi0
                  -< sfragis at interfree dot it >-
GnuPG --fingerprint: C9D7 AC97 20AE B75E 96B8  5790 D966 831D 36BD D1C1
 Contro i brevetti software: 
http://petition.eurolinux.org/index_html

 quello che ottengo linkando i files oggetto è un "unresolved reference" che si
scusate, mi sono sbagliato: l'errore non e' "unresolved reference" ma
"undefined reference"!
Inoltre volevo precisare che questi errori si manifestano coi metodi
dichiarati inline e con  quelli che fanno uso di template.
ho provato ad utilizzare la keyword export nell'implementazione dei
metodi ma sembra che il g++ non la implementi.
grazie ancora.
-- 
                F4Bi0.Strozzi


ma negli include non ci vanno solo i file di intestazione?
tu li ci stai includendo un source code...che dovrebbe essere compilato
insieme o separatamente.
Fly

 dichiarati inline e con  quelli che fanno uso di template.
e` normale che accada. Se dichiari una funzione inline allora il 
compilatore deve poter vedere anche il corpo di tale funzione nella 
stessa unita` di compilazione nella quale la usi; stesso discorso per i 
template: come hai potuto notare la export non funziona ancora su g++ 
(ne` funziona sulla maggioranza dei compilatori: al momento solo il 
comeau sembra averla implementata).
Il modo migliore per risolvere e` definire il corpo delle funzioni inline 
e/o template direttamente all'interno dell'header, lasciando il corpo 
delle funzioni non inline nel file .cpp di implementazione.
ciao Anto
-- 
Antonio Cuni, 20 anni, studente
Brainbench C++ Master: 4.73, higher than 99% of all previous test takers.
C Language: 3.79, higher than 92% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

 ciao Anto
grazie del chiarimento, ci stavo impazzendo sopra :-)
ciao Fabio
