“预期;之前......”用模板函数打印std :: vector <whatever> </whatever>

时间:2010-10-22 18:56:43

标签: c++ templates

我正在尝试为std :: vector创建一个漂亮的打印机......双打,我自己的自定义类......任何有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 个答案:

答案 0 :(得分:6)

编译器不知道您正在尝试将i声明为变量,因为该模板表达式基于模板参数。这就是关键字typename的用途。试试这个:

  typename std::vector<T>::const_iterator i = list.begin();