2012-02-06 3 views
2

Я пытаюсь перенести проект из 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.

Спасибо.

+8

[Требует более 'typename'] (http://stackoverflow.com/questions/610245/where-and-why-do-i-have-to-put-the-template-and-typename- ключевые слова). –

+0

Извините, но почему вы на самом деле это подразумеваете? Благодарю. – frarees

+1

'typename TFunctionPointerMap :: const_iterator' должен исправить это. См. Ссылку, которую я разместил для всех подробных подробностей. –

ответ

3

При обращении к зависимому типу вам не требуется ключевое слово typename. Microsoft Visual Studio неправильно принимает ваш код без typename (это известная ошибка в VS, которая никогда не будет исправлена).

typename TFunctionPointerMap::const_iterator it; 
Смежные вопросы