我在使用以下代码时遇到了一些麻烦。
#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*>]()'
答案 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;
}