Undefined reference to template function ...

Ian Lance Taylor iant@google.com
Tue May 31 15:29:00 GMT 2011


"Her, Il" <il.her@hp.com> writes:

> Thank you for answering my question.
> Here is my sample.
>
> [Test.h]
> #ifndef __TEST_hh
> #define __TEST_hh
> struct TEST
> {
> 	int a, b;
> };
> #endif
>
> [sub.h]
> #include <stdio.h>
> template <typename T> struct Base
> {
> 	void dump(T &r);
> 	int fn(int a, int b);
> };
>
> [sub.cpp]
> #include "sub.h"
>
> template<typename T> void Base<T>::dump(T &r)
> {
> }
>
> template<typename T> int Base<T>::fn(int a, int b);
> {
> 	return 0;
> }
>
> [main.cpp]
> #include <stdio.h>
> #include "sub.h"
> #include "TEST.h"
>
> int main()
> {
> 	Base<TEST> t;
> 	TEST x;
>
> 	t.dump(x);
> 	t.fn(1, 2);
> }
>
> ** Result of compiling
> [test@test-1] $ g++ -c -dynamic sub.cpp
> [test@test-1] $ g++ -shared -o libsub.so sub.o
> [test@test-1] $ g++ -g -W -o main main.cpp -lsub -L./
> /tmp/ccaUlqlQ.o: In function `main`:
> /home/guinsa/main.cpp:10: undefined reference to `Base<TEST>::dump(TEST&)`
> /home/guinsa/main.cpp:11: undefined reference to `Base<TEST>::fn(int, int)`
> collect2: ld returned 1 exit status


In your earlier message you said that you had code that worked with gcc
3.4.6 but failed with gcc 4.1.2.  Does this test case work with gcc
3.4.6?

Ian



More information about the Gcc-help mailing list