为什么要求我重载运算符=? 我之前已经遍历过std :: list而我没有遇到过这样的问题。
class Grup : public Shape {
private:
std::vector<Shape*> continut;
public:
static const std::string identifier;
Grup();
~Grup();
void add(Shape *shape);
void remove(Shape *shape);
void output(std::ostream &outs) const;
void readFrom(std::istream &ins);
void moveBy(int x, int y);
friend std::ostream &operator<<(std::ostream &outs, const Grup &grup);
};
std::ostream &operator<<(std::ostream &outs, const Grup &grup)
{
std::vector<Shape*>::iterator it;
outs << "Grupul este format din: " << std::endl;
for (it = continut.begin(); it != continut.end(); it++)
{
}
return outs;
}
错误:“没有可行的重载'='。”
答案 0 :(得分:5)
(放大屏幕截图后)grup
作为const
传递,因此begin()
将返回const_iterator
,无法将其分配给{{1} }}
将iterator
的声明更改为:
it
注意在C ++ 11中,您可以使用std::vector<Shape*>::const_iterator it;
指示编译器推导出类型:
auto
C ++ 11中的其他替代方案是range-based for
loop:
for (auto it = grup.continut.begin(); it != grup.continut.end(); it++)
{
outs << **s << std::endl;
}
带有std::for_each()
的或lambda:
for (auto& shape: grub.continut)
{
outs << *s << std::endl;
}
答案 1 :(得分:3)
更改:
std::vector<Shape *>::iterator it;
为:
std::vector<Shape *>::const_iterator it;
^^^^^^
当您传递const Grup
参考时。
或者如果您使用的是C ++ 11:
for (auto it = grup.continut.begin(); it != grup.continut.end(); ++it)
{
...
}