iMember Function Pointer to Multiple Inheritance?

I

Immortal Nephi

I am able to copy B1::Run_B1() to A::member function pointer without
any problem. I tried to do on class C1 and class D1, but compiler
gives an error message.

Main.cpp
c:\test\test\test\main.cpp(323) : error C2594: '=' : ambiguous
conversions from 'void (__thiscall B1::* )(void)' to 'void (__thiscall
D1::* )(void)'
c:\test\test\test\main.cpp(324) : error C2594: '=' : ambiguous
conversions from 'void (__thiscall B1::* )(void)' to 'void (__thiscall
E::* )(void)'

Take a look at my code below.

class C1;
class D1;
class E;

class A
{
public:
A();
~A();
void Run_A();
void (C1::*pFunc_C1)();
void (D1::*pFunc_D1)();
void (E::*pFunc_E)();
};

class B1 : virtual public A
{
public:
B1();
~B1();
void Run_B1();
};

class B2 : virtual public A
{
public:
B2();
~B2();
void Run_B2();
};

class B3 : virtual public A
{
public:
B3();
~B3();
void Run_B3();
};

class B4 : virtual public A
{
public:
B4();
~B4();
void Run_B4();
};

class C1 : public B1, public B2, public B3, public B4
{
public:
C1();
~C1();
void Run_C1();
};

class C2 : public B1, public B2, public B3, public B4
{
public:
C2();
~C2();
void Run_C2();
};

class C3 : public B1, public B2, public B3, public B4
{
public:
C3();
~C3();
void Run_C3();
};

class D1 : public C1, public C2, public C3
{
public:
D1();
~D1();
void Run_D1();
};

class D2 : public C1, public C2, public C3
{
public:
D2();
~D2();
void Run_D2();
};

class E : public D1, public D2
{
public:
E();
~E();
void Run_E();
};

A::A() {}
A::~A() {}
void A::Run_A() {}

B1::B1() {}
B1::~B1() {}
void B1::Run_B1() {}

B2::B2() {}
B2::~B2() {}
void B2::Run_B2() {}

B3::B3() {}
B3::~B3() {}
void B3::Run_B3() {}

B4::B4() {}
B4::~B4() {}
void B4::Run_B4() {}

C1::C1() {}
C1::~C1() {}
void C1::Run_C1() {}

C2::C2() {}
C2::~C2() {}
void C2::Run_C2() {}

C3::C3() {}
C3::~C3() {}
void C3::Run_C3() {}

D1::D1() {}
D1::~D1() {}
void D1::Run_D1() {}

D2::D2() {}
D2::~D2() {}
void D2::Run_D2() {}

E::E() {}
E::~E() {}
void E::Run_E() {}

int main()
{
E e;

e.pFunc_C1 = &B1::Run_B1; // OK
e.pFunc_D1 = &B1::Run_B1; // Error
e.pFunc_E = &B1::Run_B1; // Error

return 0;
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,073
Latest member
DarinCeden

Latest Threads

Top