Message-ID: <373DEA8B.AEF818E9@enter.net> Date: Sat, 15 May 1999 17:43:39 -0400 From: Sean X-Mailer: Mozilla 4.51 [en] (Win98; U) X-Accept-Language: en MIME-Version: 1.0 Newsgroups: comp.os.msdos.djgpp Subject: Re: Problem with Templates References: <373D6221 DOT 405F04B5 AT geocities DOT com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit NNTP-Posting-Host: 207.16.153.53 X-Original-NNTP-Posting-Host: 207.16.153.53 X-Trace: 15 May 1999 17:43:09 -0400, 207.16.153.53 Organization: Enter.Net Lines: 57 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Andrew Geers wrote: > > Templates appear to work perfectly in DJGPP at first glance, but if when > I tried to separate my class definition into a separate CPP file and add > it to a project file I start getting problems: > > I've put the following code in 'header.h' and #included it in all of my > CPP files in the project: > > template > class TEST > { > private: > T *testpointer; > public: > void testmethod(T *point); > } > > Then in testdef.cpp (which is included in the project) I have the > following definition: > > template > void TEST::testmethod(T *point) > { > testpointer=point; > } > > However, when in main.cpp (which is also in the project) I try the > following code the linker complains: > > void main() > { > TEST testclass; > int a=5; > int *b=&a; > > testclass.testmethod(b); > } > > The linker says "main.cpp(..) Error: Undeclared reference to > 'TEST::testmethod(int *)'" > > However, it works perfectly if I get rid of testdef.cpp and put the > definition of testmethod in header.h or at the top of main.cpp, so it > doesn't look like it's anything to do with my code, but rather something > to do with the linker. Does anybody know if this is the case, and if so, > what should be done? > > Thanks in advance, > Andrew Geers All templates are like that. Generally, I think, it's preferred to #include the cpp file at the end of the header file, but the cpp file needs to be #include'd somewhere, not just in the project file. Well, maybe there's a compiler unlike that, but that's ANSI C++. Sean