C++ 使用列表的迭代器上出现编译器错误<;对象*>;C++;

C++ 使用列表的迭代器上出现编译器错误<;对象*>;C++;,c++,iterator,operator-keyword,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 s

我在以下代码中遇到了一些问题

#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 */

尝试使用
常量迭代器
而不是
迭代器

list<TableSpace*>::const_iterator it;
list::const\u迭代器;

尝试使用
常量迭代器
而不是
迭代器

list<TableSpace*>::const_iterator it;
list::const\u迭代器;

您将迭代器定义为
列表::迭代器i但尝试迭代
列表TB。。。这可能是一个错误。

您将迭代器定义为
list::iterator i但尝试迭代
列表TB。。。这可能是一个错误。

您应该尝试:

list<TableSpace*>::iterator it;
for(it = TB.begin(); it != TB.end();it++){
    (*it)->save(out);
list::迭代器;
for(it=TB.begin();it!=TB.end();it++){
(*it)->保存(输出);
因为在迭代之后,您会得到一个指向指针的指针


另外,您是否真的需要声明所有这些方法
const
?您是否确定这意味着?

您应该尝试:

list<TableSpace*>::iterator it;
for(it = TB.begin(); it != TB.end();it++){
    (*it)->save(out);
list::迭代器;
for(it=TB.begin();it!=TB.end();it++){
(*it)->保存(输出);
因为在迭代之后,您会得到一个指向指针的指针



另外,您是否真的需要声明所有这些方法
const

例如:

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
,因此应使用
const\u迭代器

例如:

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;
}


您使用的编译器是什么?您能提供一个最简单的工作示例吗?BaseObject.h和TableSpace.h的内容可能与此问题有关。请尝试对迭代器的类型使用list::const_迭代器而不是list::iterator。由于您正在实现const方法,因此无法使用简单的非const迭代器对列表进行迭代。您解决了问题了吗?还是有些地方仍然不对劲?我已经用这里给我的建议解决了。谢谢。您使用的编译器是什么?您能提供一个最简单的工作示例吗?BaseObject.h和TableSpace.h的内容可能与问题有关。请尝试对o类型使用list::const_迭代器而不是list::iteratorf您的迭代器。由于您正在实现常量方法,因此无法使用简单的非常量迭代器对列表进行迭代。您是否解决了问题,或者问题仍然存在?我已使用此处提供的建议解决了问题。谢谢。仅在第二个代码部分中。第一个代码部分对
列表
进行迭代。共有两个部分错误,一旦第一个错误被修复,编译器将显示第二个错误。编辑:3个错误(cf ST3的答案)@Callidior这也是真的:)在这三个答案中,我们找到了所有的三个错误:)谢谢大家。答案非常快。只在第二个代码部分。第一个代码部分在
列表上迭代。有两个错误,一旦第一个错误被修复,编译器将显示第二个错误。编辑:3个错误(参考ST3的答案)@Callidior这也是正确的:)在这三个答案中,我们找到了所有三个bug:)谢谢你们这么多人。你们的答案非常快。谢谢。我不知道为什么会有不同,但现在在相同的代码中“It->save(out);”你知道为什么吗?ST3已经回答了这个问题;)必须使用
const_迭代器
,因为你将方法声明为
const
,所以不允许更改类实例的成员。谢谢。我不知道为什么会有不同,但现在在同一代码中“it->save(out);”你知道为什么吗?ST3已经回答了这个问题;)必须使用
常量迭代器
,因为你将方法声明为
const
,所以不允许更改类实例的成员。谢谢。我没有看到。谢谢。我没有看到。我忘记了“const”这个词。非常感谢。我忘了“const”这个词了。非常感谢。
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;
}