使用list <object *> C ++ </object *>的迭代器上的编译器错误

时间:2014-04-03 06:30:06

标签: c++ iterator operator-keyword

我在使用以下代码时遇到了一些麻烦。

#ifndef SGA_H
#define SGA_H

#include<list>
#include "BaseObject.h"
#include "TableSpace.h"

class SGA : public BaseObject {
private:
    list<TableSpace*> TB;
public:
    SGA();
    SGA(list<TableSpace*>);
    void save(ostream&) const;
    static SGA* read(ifstream&);
    string toString() const;
};

#endif  /* SGA_H */

有问题的代码

void SGA::save(ostream& out) const{
    salida << "SGA" << endl;
    salida << TB.size() << endl;
    list<TableSpace*>::iterator it;
    for(it = TB.begin(); it != TB.end();it++){
        it->save(out);
    }
}

这个也是

string SGA::toString() const{
    stringstream cadena;

    cadena << "\nTable Spaces: ";
    list<TableSpace>::iterator i;
    for(i=TB.begin(); i != TB.end(); i++){
        cadena << (*i).toString();
    }
    return cadena.str();
}

编译器说的是operator =

中没有巧合

输出正好是:

SGA.cpp:14:23: error: no coincidence 'operator=' en 'it = ((const SGA*)this)->SGA::TB.std::list<_Tp, _Alloc>::begin [with _Tp = TableSpace*, _Alloc = std::allocator<TableSpace*>, std::list<_Tp, _Alloc>::const_iterator = std::_List_const_iterator<TableSpace*>]()'

4 个答案:

答案 0 :(得分:2)

你应该尝试:

list<TableSpace*>::iterator it;
for(it = TB.begin(); it != TB.end();it++){
    (*it)->save(out);

因为在迭代之后你会得到一个指向指针的指针。


另外,你真的需要声明所有这些方法const ??确定这意味着什么?

答案 1 :(得分:1)

尝试使用const_iterator代替iterator

list<TableSpace*>::const_iterator it;

答案 2 :(得分:1)

您将迭代器定义为list<TableSpace>::iterator i;但尝试迭代list<TableSpace*> TB; ...这可能是一个错误。

答案 3 :(得分:0)

由于相关功能是const,您应该使用const_iterator

例如:

class test{
    public:
    list<int> x;
    test(){
    }
    int get() const{
      list<int>::iterator i;
      for(i=x.begin();i!=x.end();i++)
        return *i;
    }
};

int main() {
    test a=test();
    a.x.push_back(10);
    cout<<a.get();
    return 0;
}

重现您的错误。使用const_iterator错误时已解决。 http://ideone.com/e.js/zDyuQU

class test{
    public:
    list<int> x;
    test(){
    }
    int get() const{
      list<int>::const_iterator i;
      for(i=x.begin();i!=x.end();i++)
        return *i;
    }
};

int main() {
    test a=test();
    a.x.push_back(10);
    cout<<a.get();
    return 0;
}