预期';'表达后

时间:2012-02-06 02:54:54

标签: c++ factory

我试图将项目从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上正确编译。

感谢。

1 个答案:

答案 0 :(得分:3)

在引用依赖类型时,您缺少必需的typename关键字。 Microsoft Visual Studio错误地接受了没有typename的代码(这是VS中众所周知的错误,永远无法纠正)。

typename TFunctionPointerMap::const_iterator it;