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:1() {}
D1::~D1() {}
void D1::Run_D1() {}
D2:2() {}
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;
}
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:1() {}
D1::~D1() {}
void D1::Run_D1() {}
D2:2() {}
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;
}