template with friend function problem

Vladimir Yelistratov yelistratov@gmd.de
Mon Mar 20 06:41:00 GMT 2000


   Dear colleagues!

I have the following problem with friend function of a
template class on the following configuration:

gcc -v
Reading specs from <...>lib/gcc-lib/i686-pc-linux-gnu/2.95.2/specs
gcc version 2.95.2 19991024 (release)

I try to do everything as stated in the corresponding section of FAQ
I compile everything WITHOUT special flags

______________________________________________
// Vector.h file
// declare class
template<class Type> class CoolVector;
// declare friend function
template <class Type> CoolVector<Type> cross_3d(const CoolVector<Type>&,
const CoolVector<Type>&);


template<class Type> class CoolVector : public CoolBaseVector {

friend CoolVector<Type> cross_3d<>(const CoolVector<Type>&, //
cross-product
      const CoolVector<Type>&); // of 3d-vectors

}

_______________________________________________
// Vector.C file
#include <Vector.h>
template<class Type>
CoolVector<Type> cross_3d(const CoolVector<Type>& v1, const
CoolVector<Type>& v2) {
/* implementing function here */
}
________________________________________________

I try to compile these files for dynamic library. I use special file to
instantiate
everything that is necessary:
________________________________________________
// instantiate.cpp file
#include <Vector.C>
/* I instantiate also non-friend functions. It goes well */
template CoolVector<float> cross_3d(const CoolVector<float>&, const
CoolVector<float>&);
_______________________________________________

So, I get my library and try to compile a small program with it.
I get the following error:
<path to library>.so: undefined reference to `cross_3d(CoolVector<float>
const &, CoolVector<float> const &)'

Once more, I do not use special flags for dealing with templates and
instantiation of non-friend functions goes quite well.

What is wrong with my instantiation of friend functions?

Thank you for your help,
Vladimir












More information about the Gcc mailing list