Re: Multipal inharitance error: conflicting
On Friday, September 14, 2012 3:25:45 PM UTC+3, sumit...@gmail.com wrote:
On Friday, September 14, 2012 5:00:14 PM UTC+5:30, =D6=F6 Tiib wrote:
On Friday, September 14, 2012 11:01:08 AM UTC+3, sumit...@gmail.com wro=
te:
Hi,
I am getting error on doing multipal inheritance.
Please check the below code-
class Hal
{
public:
virtual int SetPrintLoss()
Type 'void' here ^^^ instead of 'int'.
please suggest me what to do now.
Enable warnings and pay attention to those. Most compilers warn that
Hal::SetPrintLoss() does not return anything despite being declared
int.
Thanks.
Agreed, Now Hal::SetPrintLoss() is returning 0.
the change code is -
class Hal
5 {
6 public:
7 virtual int SetPrintLoss()
8 {
9 cout << "Hal::SetPrintLoss" << endl;
10 return 0;
11 }
12 };
13 class FluxGrid : public Hal
14 {
15 public:
16 void SomeFunction()
17 {
18 cout << "FluxGrid::SomeFunction" << endl;
19 }
20 };
21 class HalAmplifier
22 {
23 public:
24 virtual void SetPrintLoss()
25 {
26 cout << "HalAmplifier::SetPrintLoss" << endl;
27 }
28 };
29 class Simulator : public FluxGrid, public HalAmplifier
30 {
31 public:
32 virtual void SetPrintLoss()
33 {
34 cout << "Simulator::SetPrintLoss" << endl;
35 }
36 };
-----------------------------------------
sumit15nov@in-lnxbld99:~/code$ g++ -Wall -Wextra -pedantic -c multipal-in=
haritance-error.cpp
multipal-inharitance-error.cpp:42: error: conflicting return type specifi=
ed for =91virtual void Simulator::SetPrintLoss()'
multipal-inharitance-error.cpp:7: error: overriding =91virtual int Hal:=
:SetPrintLoss()'
sumit15nov@in-lnxbld99:~/code$
--------------------------------------------
It is very clear what is happening, please need some suggestion .
Problem is that you have overrides with same signature but non-compatible r=
eturn type. There a re lot of solutions.
1) You can have different functions (for example rename 'Hal::SetPrintLoss=
()' as 'Hal::SetLoss()' )
2) You can make them valid overrides of same inheritance tree. Should have=
same return type then.
3) You can make the signatures different and so turn them into overloads (=
for example have 'int Hal::SetPrintLoss(int)' instead of 'int Hal::SetPrin=
tLoss()').
4) You can stop using language features that you do not understand in your=
code.