我正在尝试为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'
我不确定是什么造成了这种情况,但我怀疑我是在滥用模板。任何帮助将不胜感激!
答案 0 :(得分:6)
编译器不知道您正在尝试将i
声明为变量,因为该模板表达式基于模板参数。这就是关键字typename
的用途。试试这个:
typename std::vector<T>::const_iterator i = list.begin();