В C++ я пытаюсь получить std::vector::iterator
для моего шаблона. Однако, когда я его компилирую, я получаю ошибки: error C2146: syntax error : missing ';' before identifier 'iterator'
, error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
. Я также получаю предупреждение: warning C4346: 'std::vector<T>::iterator' : dependent name is not a type
:C++ template std :: vector :: ошибка итератора
#include <vector>
template<class T> class v1{
typedef std::vector<T>::iterator iterator; // Error here
};
class v2{
typedef std::vector<int>::iterator iterator; // (This works)
};
Я даже попытался
template<typename T> class v1{
typedef std::vector<T>::iterator iterator;
};
И
template<typename T = int> class v1{
typedef std::vector<T>::iterator iterator;
};
возможно дубликат [? Где и почему я должен поставить «шаблон» и «TYPENAME» ключевые слова] (http://stackoverflow.com/ вопросы/610245/where-and-why-do-i-have-to-put-the-template-and-typename-keywords) – juanchopanza
Известно, что clang ++ имеет довольно приличные сообщения об ошибках, особенно для таких ошибок. В этом случае он говорит * error: missing 'typename' до имени зависимого типа 'std :: vector :: iterator' *. Я рекомендую попробовать clang (например, в онлайн-компиляторе), если вы не можете понять сообщение об ошибке другого компилятора. –
dyp
@DyP GCC имеет похожие сообщения об ошибках. – Rapptz