Это происходит потому, что list<char> and list<int>
- это два разных класса.Так что их итераторы тоже разных типов.
Если вы посмотрите на код класса std :: list, вы увидите что-то вроде:
typedef _Iterator<_SECURE_VALIDATION_DEFAULT> iterator;
или
typedef _Iterator<bla_bla_bla> iterator;
Это означает новый типопределяется каждым отдельным списком классов.Другими словами, каждый список определяет свой собственный тип итератора.
Измените свой код на это:
list<char>::iterator it;