[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [PROGRAMMERING] c++ klasser på tværs af filer



Morten Bo Nielsen wrote:

hej

Jeg har mine problemer med filer for tiden.

jeg har tre filer:
main.cpp main hvor jeg instanciater en klasse. DataDevice.cpp koden til klassen
DataDevice.h header fil med definitionen af klassen.


meget standard.

jeg har en template baseret klasse.
I DataDevice.cpp har jeg bl.a.
DataDevice<class D>::setData( D *data ) {
...
}


og i DataDevice.h
template <class D>
class DataDevice
{
....
setData( D *Data );
...
}

Jeg kompiler uden fejl, men linkeren fortæller [Linker error] undefined reference to `DataDevice<GenericDataStruct>::setData(unsigned int, GenericDataStruct *)'

Jeg har prøvet koden med gcc og med msvc (ja, undskyld) og de kommer begge med samme besked.
Kopierer jeg hele DataDevice.cpp ind i DataDevice.h, virker det uden problemer.

Og g++.exe ClassTest.o DataDevice.o -o "Projekt1.exe" -L"C:/Dev-Cpp/lib" -mwindows
så den prøver at linke DataDevice delen med.


Er der nogen der har set dette fænomen før?



Jeg har stået i præcis samme problem som dig - og fik dengang mit største knæk i tiltroen til C++og clean code... :-)

Hele problemet ligger i, at du bruger templates. Brugte du ikke templates, ville det virke, som du gør det, og ideelt set burde det også virke med templates, men det er noget med (jeg har formentlig ikke forstået dette, men...), når du compiler DataDevice.cpp kan compileren ikke lave en færdig kode, som kan linkes med main, da den ikke ved hvilken type data main har tænkt sig at instantiere med. Derfor er man nødt til at kompile main.cpp og koden fra DataDevice.cpp sammen. Så den eneste løsning er at have det hele i DataDevice.h eller at inkludere både DataDevice.h og DataDevice.cpp

Mange hilsner


Lars




 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 22:44 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *