我正在对遗留代码执行一些后台维护。
它涉及用STL替换已弃用的库并进行提升,同时保持界面与人类尽可能相似。
ostream& operator<<(ostream& vos, const OurList<class T>& coll)
{
// OurList wraps an stl list with the same interface as the current library
// OurListIterator wraps an iterator class used to access OurList
OurListIterator<T, OurList<class T> > iter((OurList<class T>&)coll);
// this function gets the first item in the list and then each next one
while (iter())
{
// key returns the value pointed to by the iterator
vos << iter.key();
}
};
但是,当我编译它时,我在vos&lt;&lt; iter.key()行:
二进制'&lt;&lt;' :没有找到哪个操作符的右侧操作数 输入'T'(或没有可接受的转换)
我猜测编译器正在抱怨,因为它事先不知道T是否可以序列化?但是,这适用于当前的库 - 我错过了什么吗?
答案 0 :(得分:2)
您可以尝试:(template <typename T>
已添加,class
已删除。
template <typename T>
ostream& operator<<(ostream& vos, const OurList<T>& coll)
{
// OurList wraps an stl list with the same interface as the current library
// OurListIterator wraps an iterator class used to access OurList
OurListIterator<T, OurList<T> > iter((OurList<T>&)coll);
// this function gets the first item in the list and then each next one
while (iter())
{
// key returns the value pointed to by the iterator
vos << iter.key();
}
}