Newsgroup: it.comp.os.linux.development
Titolo: Problemi con il linker gcc!

Ho provato a fare il mio primo programma di una certa dimensione, che 
comprende 4 classi (con i rispettivi file header e cpp), più una funzione 
main che per ora è banalissima e servirebbe solo per testare.
Il compilatore non ha alcun problema, dice che non ci sono errori di 
sintassi. Il problema avviene al momento di linkare tutto insieme: il 
messaggio di errore completo l'ho incluso a fine messaggio.
Non ho alcuna esperienza con gcc, né con kdevelop (che ho usato per 
programmare questo). gcc è la versione 2.95.2, standard sulla Suse 7.1
Matrix è un template che rappresenta una matrice, Relazione è una classe 
derivata da una instanzazione della matrice come double.
Se avete qualche idea sul perché non trovi le funzioni (che esistono 
tutte), avvertitemi (sul newsgroup, non via email).
Freeman
Relazione.o: In function `double * __uninitialized_fill_n_aux<double *, 
unsigned int, double>(double *, unsigned int, double const &, __true_type)':
/usr/include/g++/stl_alloc.h(.text+0xf): undefined reference to 
`Matrix<double>::Matrix(void)'
/usr/include/g++/stl_alloc.h(.text+0x37): undefined reference to 
`Matrix<double>::~Matrix(void)'
relazione.o: In function `Relazione::~Relazione(void)':
/home/praise/fuzzycmeans/fuzzycmeans/relazione.cpp:23: undefined reference 
to `Matrix<double>::~Matrix(void)'
relazione.o: In function `Relazione::minmax(Relazione &) const':
/home/praise/fuzzycmeans/fuzzycmeans/relazione.cpp:43: undefined reference 
to `Matrix<double>::at(int, int) const'
/home/praise/fuzzycmeans/fuzzycmeans/relazione.cpp:44: undefined reference 
to `Matrix<double>::at(int, int) const'
/home/praise/fuzzycmeans/fuzzycmeans/relazione.cpp:48: undefined reference 
to `Matrix<double>::at(int, int, double const &)'
relazione.o: In function `Relazione::alphacut(double)':
/home/praise/fuzzycmeans/fuzzycmeans/relazione.cpp:96: undefined reference 
to `Matrix<double>::at(int, int) const'
/home/praise/fuzzycmeans/fuzzycmeans/relazione.cpp:98: undefined reference 
to `Matrix<double>::at(int, int, double const &)'
/home/praise/fuzzycmeans/fuzzycmeans/relazione.cpp:100: undefined reference 
to `Matrix<double>::at(int, int, double const &)'
relazione.o: In function `double * __uninitialized_fill_n_aux<double *, 
unsigned int, double>(double *, unsigned int, double const &, __true_type)':
/usr/include/g++/stl_alloc.h(.gnu.linkonce.d.__vt_9Relazione+0xc): 
undefined reference to `Matrix<double>::operator==(Matrix<double> const &) 
const'
/usr/include/g++/stl_alloc.h(.gnu.linkonce.d.__vt_9Relazione+0x10): 
undefined reference to `Matrix<double>::operator=(Matrix<double> const &)'
/usr/include/g++/stl_alloc.h(.gnu.linkonce.d.__vt_9Relazione+0x18): 
undefined reference to `Matrix<double>::dim(void)'
/usr/include/g++/stl_alloc.h(.gnu.linkonce.d.__vt_9Relazione+0x1c): 
undefined reference to `Matrigmake[3]: Leaving directory 
`/home/praise/fuzzycmeans/fuzzycmeans'
x<double>::dim2(void)'
/usr/include/g++/stl_alloc.h(.gnu.linkonce.d.__vt_9Relazione+0x20): 
undefined reference to `Matrix<double>::operator[](int)'
/usr/include/g++/stl_alloc.h(.gnu.linkonce.d.__vt_9Relazione+0x24): 
undefined reference to `Matrix<double>::operator[](int) const'
/usr/include/g++/stl_alloc.h(.gnu.linkonce.t.__as__9RelazioneRC9Relazione+0x14): 
undefined reference to `Matrix<double>::operator=(Matrix<double> const &)'
main.o: In function `__default_alloc_template<true, 0>::_Lock::_Lock(void)':
/usr/include/g++/stl_alloc.h:393: undefined reference to 
`Matrix<double>::Matrix(void)'
/usr/include/g++/stl_alloc.h:393: undefined reference to 
`Matrix<double>::~Matrix(void)'
/usr/include/g++/stl_alloc.h:393: undefined reference to 
`Matrix<double>::~Matrix(void)'

tutte), avvertitemi (sul newsgroup, non via email).
che comando dai per compilare?

gilgalad wrote:

È quello automatico del kdevelop, che ti riporto in seguito:
g++ -O0 -g3 -Wall -o fuzzycmeans punto.o cluster.o relazione.o matrix.o 
main.o  ./Globali/libGlobali.a
Questo comando è quello che origina tutti gli errori "undefined reference". 
Non so se il kdevelop usa il comando "giusto".  Io sospetto che il problema 
stia nel fatto che il gcc non generi quando dovrebbe le funzioni <double> 
per il template da me fatto Matrix.
O forse sono io che non sono riuscito a farle generare?
Freeman 

Ho risolto il problema: la mia testa di rapa non si ricordava che dovevo 
mettere le definizioni e le dichiarazioni del template nello stesso file.
Ora quei problemi di cui vi parlavo sono spariti