Вложенная структура в шаблонном классе с std::map::const_iterator?
Вопрос
Следующий код генерирует синтаксическую ошибку в строке, где объявлен итератор:
template <typename T>
class A
{
public:
struct B
{
int x, y, z;
};
void a()
{
std::map<int, B>::const_iterator itr; // error: ; expected before itr
}
std::vector<T> v;
std::map<int, B> m;
};
Это происходит только тогда, когда A является шаблонным классом.Что не так с этим кодом?Если я перемещаю B из A, код компилируется нормально.
Решение
Вам нужно имя типа:
typename std::map<int, B>::const_iterator itr;
Итератор является зависимым типом (зависит от B), и когда у вас возникает такая ситуация, компилятор требует, чтобы вы уточнили ее с помощью typename .
Существует разумное обсуждение этого вопроса здесь.
Не связан с StackOverflow