C++ 使用MSVC而不是GCC编译模板
我有以下代码(简化以突出当前问题):C++ 使用MSVC而不是GCC编译模板,c++,templates,visual-c++,gcc,C++,Templates,Visual C++,Gcc,我有以下代码(简化以突出当前问题): 模板 类CFiniteStateEventBase{}; 模板 类CFiniteStateCursor{}; 模板 类CFiniteStateBase{}; 模板 类CfiniteStatTransitionBase { 受保护的: CFiniteStateBase*m_pfsbTo; 公众: cfinitestateransitionbase(CFiniteStateBase*pfsbTo) :m_pfsbTo(pfsbTo){} 虚拟~cfinitest
模板
类CFiniteStateEventBase{};
模板
类CFiniteStateCursor{};
模板
类CFiniteStateBase{};
模板
类CfiniteStatTransitionBase
{
受保护的:
CFiniteStateBase*m_pfsbTo;
公众:
cfinitestateransitionbase(CFiniteStateBase*pfsbTo)
:m_pfsbTo(pfsbTo){}
虚拟~cfinitestransitionbase(){}
虚拟int VTransition()=0;
};
模板
类CFiniteStateYesTransition
:public cfinitestransionbase
{
公众:
CFiniteStateYesTransition(CFiniteStateBase*pfsbTo)
:cfinitestransitionbase(pfsbTo){}
虚拟int VTransition()
{
m_pfsbTo=0;
返回0;
}
};
它在MSVC(6和2012)上编译良好,但在GCC(3.4.6和4.1.2在CentOS 5.10上)中,我得到以下错误:
fsb.cpp:在成员函数“virtual int cfinitestatetransition::VTransition(cfinitestateventbase,DATA,CFiniteStateBase,CFiniteStateBase*,CFiniteStateCursor)”中:
fsb.cpp:33:erreur:“m_pfsbTo”未在此范围内声明
m_pfsbTo
的声明有什么问题?将m_pfsbTo
更改为
CFiniteStateTransitionBase<DATA,ENUM_STATES,ENUM_EVENTS>::m_pfsbTo
cfinitestransitionbase::m_pfsbTo
在虚拟函数中
Scott Meyers解决了有效C++中的第43条中的问题,我引用了:< /P>
问题是,当编译器遇到
类模板记录msgsender
,他们不知道它是什么类
继承自。当然,它是MsgSender
,但公司
是
模板参数,一个直到以后才知道的参数(当
loggingmsender
已实例化)。在不知道公司是什么的情况下,
无法知道类MsgSender
是什么样子。
特别是,无法知道它是否具有sendClear
功能
按名称进行模数运算,这完全适用于您的情况。MSVC是错误的。您需要
此->m_pfsbTo
。请看,我更新了答案以解决您的问题。希望能有帮助。
CFiniteStateTransitionBase<DATA,ENUM_STATES,ENUM_EVENTS>::m_pfsbTo