我正在尝试为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;
}
Run Code Online (Sandbox Code Playgroud)
第三行给出了编译错误, error: expected ';' before 'i'
我不确定是什么导致这种情况,但我怀疑我是在滥用模板.任何帮助,将不胜感激!
编译器不知道您正在尝试声明i为变量,因为该模板表达式基于模板参数.这就是关键字的原因typename.试试这个:
typename std::vector<T>::const_iterator i = list.begin();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1962 次 |
| 最近记录: |