D
Dmitry
Hi all,
Consider the following code:
class A {
public:
A() {}
void DoMethod() { (this->*m_pMethod)(); }
protected:
virtual void MethodA() { ... }
virtual void MethodB() { ... }
void (A::*m_pMethod)();
};
class B1 : public A {
public:
B1() { m_pMethod = &A::MethodA; } // invokes B1::MethodA()
protected:
virtual void MethodA() { ... }
};
Class A has a member m_pMethod, which is pointer to a class member
function. This function can be over ridden by derived class (in my
example this is what B1 does). There more B2....Bn in the system.
This code was fine under gcc 3.2.3 but not ok under 4.1.2:
test.cc: In constructor 'B1::B1()':
test.cc:9: error: 'virtual void A::MethodA()' is protected
test.cc:17: error: within this context
Ok, after some googling I found it's related to gcc 3.4 changes -
http://www.gnu.org/software/gcc/gcc-3.4/changes.html#3.4.6 (look for
"forming a pointer to member or a pointer to member function").
Setting B1() { m_pMethod = &B1::MethodA; } does not help too:
test.cc: In constructor 'B1::B1()':
test.cc:17: error: cannot convert 'void (B1::*)()' to 'void (A::*)()'
in assignment
Any ideas how to fix it?
BR
Dima
Consider the following code:
class A {
public:
A() {}
void DoMethod() { (this->*m_pMethod)(); }
protected:
virtual void MethodA() { ... }
virtual void MethodB() { ... }
void (A::*m_pMethod)();
};
class B1 : public A {
public:
B1() { m_pMethod = &A::MethodA; } // invokes B1::MethodA()
protected:
virtual void MethodA() { ... }
};
Class A has a member m_pMethod, which is pointer to a class member
function. This function can be over ridden by derived class (in my
example this is what B1 does). There more B2....Bn in the system.
This code was fine under gcc 3.2.3 but not ok under 4.1.2:
test.cc: In constructor 'B1::B1()':
test.cc:9: error: 'virtual void A::MethodA()' is protected
test.cc:17: error: within this context
Ok, after some googling I found it's related to gcc 3.4 changes -
http://www.gnu.org/software/gcc/gcc-3.4/changes.html#3.4.6 (look for
"forming a pointer to member or a pointer to member function").
Setting B1() { m_pMethod = &B1::MethodA; } does not help too:
test.cc: In constructor 'B1::B1()':
test.cc:17: error: cannot convert 'void (B1::*)()' to 'void (A::*)()'
in assignment
Any ideas how to fix it?
BR
Dima