模板:不兼容的列表迭代器

时间:2015-10-17 16:46:02

标签: c++ list templates

我已经实现了一个重载的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;。一个简单的转变如何对该计划产生这样的影响?

我要感谢任何帮助,提前谢谢!

1 个答案:

答案 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。