Linking issue while using C++ Templates
Rajat
myself_rajat@yahoo.com
Wed Sep 23 09:11:00 GMT 2009
Thanks a lot for the help Ian. It solves the problem.
However I was not sure, if it has nothing to do with gcc as such, then why was it working fine with gcc egcs-2.91.66. Any idea ?
Thanks,
Rajat.
----- Original Message ----
From: Ian Lance Taylor <iant@google.com>
To: Rajat <myself_rajat@yahoo.com>
Cc: gcc-help@gcc.gnu.org
Sent: Wednesday, September 23, 2009 11:18:02 AM
Subject: Re: Linking issue while using C++ Templates
Rajat <myself_rajat@yahoo.com> writes:
> //A.h -- sample code.
> template<typename T> class A
> {
> public:
> static A * getInstance ()
> {
> if (!_instance)
> _instance = new A ();
> return _instance;
> }
>
> T * getApp () const { return _pApp; }
>
> private:
> T * _pApp;
> static A * _instance;
> };
...
> File x.cpp compiles perfactly, but while linking it throws error saying,
> x.o(.gnu.linkonce.t._ZN9AI11BE11getInstanceEv+0x9): In function `A<B>::getInstance()':
> A.h:: undefined reference to `A<B>::_instance'
> collect2: ld returned 1 exit status
>
> Any clue ?
You have to define your static variables, not just declare them. This
is standard C++--it doesn't have anything to do with gcc as such.
template<typename T> A<T>* A<T>::_instance;
Ian
More information about the Gcc-help
mailing list