Strange! When I use your code (which seems perfectly correct to me) I get
the following message:
c:\test\template mult\main.cpp(28) : error C2440: 'initializing' : cannot
convert from 'void' to 'class Veld<double>'
line 28 is:
Veld<double> v = mult(v1, v2, v3);
So, again, MS VC 6 sees mult as returning void...
Jochen
"tom_usenet" <tom_usenet@hotmail.com> wrote in message
news:lbcp305seunikm6qfje4faco3gld0a1ki5@4ax.com...[color=blue]
> On Wed, 25 Feb 2004 12:11:17 +0100, "Jochen Zeischka"
> <jochen.zeischka@rug.ac.be> wrote:
>[color=green]
> >I'm puzzled. When compiling this:
> >
> >template<class ValRes, class Val1, class Val2>
> >Veld<ValRes>& mult(Veld<ValRes>& res, const Veld<Val1>& v1, const
> >Veld<Val2>& v2) {
> > // something
> > return res;
> >}
> >
> >the compiler says:
> >
> >error C2562: 'mult' : 'void' function returning a value
> >c:\fe dev\lin lag 9\veld.h(64) : see declaration of 'mult'
> >
> >which is the following line within the 'Veld' class:
> >
> > template<class ValRes, class Val1, class Val2>
> > friend Veld<ValRes>& mult(Veld<ValRes>& res, const Veld<Val1>& v1, const
> >Veld<Val2>& v2);
> >
> >forward declaration of the friend function was done as follows:
> >
> >template<class Val> class Veld;
> >
> >template<class ValRes, class Val1, class Val2>
> >Veld<ValRes>& mult(Veld<ValRes>& res, const Veld<Val1>& v1, const
> >Veld<Val2>& v2);
> >
> >Why is the compiler talking about a 'void' function? To me it seems that[/color][/color]
a[color=blue][color=green]
> >'Veld<ValRes>&' is returned...[/color]
>
> To me too. This compiled fine for me on 3 compilers:
>
> template<class Val>
> class Veld;
>
> template<class ValRes, class Val1, class Val2>
> Veld<ValRes>& mult(Veld<ValRes>& res, const Veld<Val1>& v1, const
> Veld<Val2>& v2);
>
> template<class Val>
> class Veld
> {
> template<class ValRes, class Val1, class Val2>
> friend Veld<ValRes>& mult(Veld<ValRes>& res, const Veld<Val1>& v1,
> const Veld<Val2>& v2);
> //private var to test friendship
> Val v;
> };
>
> template<class ValRes, class Val1, class Val2>
> Veld<ValRes>& mult(Veld<ValRes>& res, const Veld<Val1>& v1, const
> Veld<Val2>& v2)
> {
> res.v = v1.v + v2.v;
> return res;
> }
>
> int main()
> {
> Veld<double> v1;
> Veld<int> v2;
> Veld<short> v3;
> Veld<double> v = mult(v1, v2, v3);
> }
>
> What compiler are you using? Can you post a complete program
> exhibiting the error?
>
> Tom
> --
> C++ FAQ:
http://www.parashift.com/c++-faq-lite/
> C FAQ:
http://www.eskimo.com/~scs/C-faq/top.html[/color]