Почему я не могу пользоваться подклассом шаблонного класса, передаваемого в функцию с шаблонным шаблоном?
Я создал функцию printVector, выводящую содержимое любого вектора (если для них определён оператор << соответственно):
#include <iostream>
#include <vector>
using namespace std;
template<class templateType>
void printVector(vector<templateType>& container)
{
for(vector<templateType>::iterator it = container.begin(); it != container.end() ; it++)
{
cout << *it<<" ";
}
cout << endl;
}
int main()
{
vector<int> container = { 1,2,3 };
printVector(container);
}
При определении шаблонного вектора в printVector я не могу создать объект его подкласса iterator:
vector<templateType>::iterator it; // ERROR
Данную проблему я решил, использовав auto:
#include <iostream>
#include <vector>
using namespace std;
template<class templateType>
void printVector(vector<templateType>& container)
{
for(auto it = container.begin(); it != container.end() ; it++)
{
cout << *it<<" ";
}
cout << endl;
}
int main()
{
vector<int> container = { 1,2,3 };
printVector(container);
}
Но всё - же интересно, почему я не могу создать объект подкласса с помощью его имени (vector<templateType>::iterator), но при этом могу с помощью auto?
Ответы (1 шт):
Автор решения: Mikhailo
→ Ссылка
Потому что в
for(vector<templateType>::iterator it = container.begin();
it != container.end() ; it++)
{
компилятор не знает, что iterator - это тип. Может, это статическая переменная?
Чтобы пояснить ему, что это тип, надо написать
for(typename vector<templateType>::iterator it = container.begin();
it != container.end() ; it++)
{