Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用MSVC而不是GCC编译模板_C++_Templates_Visual C++_Gcc - Fatal编程技术网

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