我试图将项目从Windows移植到Mac。我在编写班级CFactory时遇到了麻烦。我试着说明问题所在。
这是我在 Factory.h
上的内容namespace BaseSubsystems
{
template <class T>
class CFactory
{
protected:
typedef T (*FunctionPointer)();
typedef std::pair<std::string,FunctionPointer> TStringFunctionPointerPair;
typedef std::map<std::string,FunctionPointer> TFunctionPointerMap;
TFunctionPointerMap _table;
public:
CFactory () {}
virtual ~CFactory();
}; // class CFactory
template <class T>
inline CFactory<T>::~CFactory()
{
TFunctionPointerMap::const_iterator it = _table.begin();
TFunctionPointerMap::const_iterator it2;
while( it != _table.end() )
{
it2 = it;
it++;
_table.erase(it2);
}
} // ~CFactory
}
当我尝试编译时,编译器会抱怨:
Factory.h:95:44: error: expected ';' after expression [1]
TFunctionPointerMap::const_iterator it = _table.begin();
^
;
为什么会这样?我错过了吗?
注意:此项目在MSVC上正确编译。
感谢。
答案 0 :(得分:3)
在引用依赖类型时,您缺少必需的typename
关键字。 Microsoft Visual Studio错误地接受了没有typename
的代码(这是VS中众所周知的错误,永远无法纠正)。
typename TFunctionPointerMap::const_iterator it;