Connecting Tech Pros Worldwide Forums | Help | Site Map

void function returning value?

Jochen Zeischka
Guest
 
Posts: n/a
#1: Jul 22 '05
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 a
'Veld<ValRes>&' is returned...

Thanks a lot for any help!

Jochen Zeischka



tom_usenet
Guest
 
Posts: n/a
#2: Jul 22 '05

re: void function returning value?


On Wed, 25 Feb 2004 12:11:17 +0100, "Jochen Zeischka"
<jochen.zeischka@rug.ac.be> wrote:
[color=blue]
>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 a
>'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
Jochen Zeischka
Guest
 
Posts: n/a
#3: Jul 22 '05

re: void function returning value?


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]


John Harrison
Guest
 
Posts: n/a
#4: Jul 22 '05

re: void function returning value?



"Jochen Zeischka" <jochen.zeischka@rug.ac.be> wrote in message
news:c1ibm1$b2b$1@gaudi2.UGent.be...[color=blue]
> 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
>[/color]

VC++ 6 has lots of problems with templates. Make sure you have the latest
service pack (SP5 I think) if that doesn't fix it then try an VC group,
maybe they'll know a workaround.

john


Closed Thread