«Ожидается; до ...» с функцией шаблона для печати std :: vector <Whatever> - PullRequest
2 голосов
/ 22 октября 2010

Я пытаюсь сделать симпатичный принтер для std :: vector из чего угодно ... double, моих собственных классов ... всего, что имеет friend std::ostream& operator<<.

Однако при попытке скомпилировать следующую функцию:

template <typename T> 
std::ostream& operator<<(std::ostream& os, std::vector<T> const& list) {
  std::vector<T>::const_iterator i = list.begin();

  if (i == list.end()) {
    os << "[ ]";
    return os;
  }

  os << "[ " << *i << "\n";

  ++i;
  for (; i != list.end(); ++i) {
    os << ", " << *i << "\n";
  }

  os << "]";
  return os;
}

Третья строка дает ошибку компиляции, error: expected ';' before 'i'

Я не совсем уверен, что вызывает это, но я подозреваю, что неправильно использую шаблоны. Любая помощь будет оценена!

1 Ответ

6 голосов
/ 22 октября 2010

Компилятор не знает, что вы пытаетесь объявить i как переменную, поскольку это выражение шаблона основано на параметре шаблона. Вот почему ключевое слово typename предназначено для. Попробуйте это:

  typename std::vector<T>::const_iterator i = list.begin();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...