I have the following code (simplified to highlight the current problem):
template <class ENUM_EVENTS>
class CFiniteStateEventBase {};
template <class DATA,class ENUM_STATES,class ENUM_EVENTS>
class CFiniteStateCursor {};
template <class DATA,class ENUM_STATES,class ENUM_EVENTS>
class CFiniteStateBase {};
template <class DATA,class ENUM_STATES,class ENUM_EVENTS>
class CFiniteStateTransitionBase
{
protected:
CFiniteStateBase<DATA,ENUM_STATES,ENUM_EVENTS> * m_pfsbTo;
public:
CFiniteStateTransitionBase(CFiniteStateBase<DATA,ENUM_STATES,ENUM_EVENTS> * pfsbTo)
: m_pfsbTo(pfsbTo) {}
virtual ~CFiniteStateTransitionBase() {}
virtual int VTransition() = 0;
};
template <class DATA,class ENUM_STATES,class ENUM_EVENTS>
class CFiniteStateYesTransition
: public CFiniteStateTransitionBase<DATA,ENUM_STATES,ENUM_EVENTS>
{
public:
CFiniteStateYesTransition(CFiniteStateBase<DATA,ENUM_STATES,ENUM_EVENTS> * pfsbTo)
: CFiniteStateTransitionBase<DATA,ENUM_STATES,ENUM_EVENTS>(pfsbTo) {}
virtual int VTransition()
{
m_pfsbTo = 0;
return 0;
}
};
It compiles fine on MSVC (6 and 2012) but wit GCC (3.4.6 and 4.1.2 on CentOS 5.10) I get the following error:
fsb.cpp: In member function ‘virtual int CFiniteStateYesTransition::VTransition(CFiniteStateEventBase, DATA, CFiniteStateBase, CFiniteStateBase*, CFiniteStateCursor)’: fsb.cpp:33: erreur: ‘m_pfsbTo’ was not declared in this scope
What is wrong with the declaration of m_pfsbTo
?