我已经实现了一个重载的Shift运算符,它需要一个输出流作为参数。在另一个类中,我正在处理此函数,该函数返回重载运算符的输出流。
此类包含车辆列表,我想返回包含这些车辆名称的流。
std::ostream& classname::outputprint(std::ostream& outputstream) const
{
typedef std::list <Vehicles*>::iterator itType;
itType it3;
outputstream << std::setw(9) << name;
for(cVehicles.begin() = it3; cVehicles.end() != it3 ; ++it3)
{
outputstream << std::setw(4) << (*it3)->getName();
}
return outputstream;
}
在头文件中,Container声明如下:
std::list<Vehicles*> cVehicles;
当我尝试启动程序时,我收到错误: &#34;表达式:列表迭代器不兼容&#34;
有人可以向我解释为什么我会收到此错误以及如何解决此问题?
此外,我尝试将for循环更改为:
for( it3 = cVehicles.begin(); cVehicles.end() != it3 ; ++it3)
{
...
}
这里程序根本没有编译,我收到错误: &#34;否&#39; =&#39;运算符匹配这些操作数&#34;。一个简单的转变如何对该计划产生这样的影响?
我要感谢任何帮助,提前谢谢!
答案 0 :(得分:1)
假设(>>>=) :: (Monad m, Monad n, ?? n) => m (n a) -> (a -> m (n b)) -> m (n b)
是成员变量,那么它是cVehicles
。您需要const
来迭代它。
第二个问题是你在函数的for循环中反转了赋值。
您得到的最后一个错误是因为迭代器问题。 const_iterator
会返回一个const_iterator,但不能将其分配给begin()
。另一种方法是OK,但不是const到非const。