麻烦迭代列表

时间:2014-02-02 02:44:53

标签: c++ list class iterator member

我正在研究这个项目,它基本上从文件中读取信息,在对象上使用该信息,然后创建一个包含对象的列表。

我有一个名为Acao的类,它基本上包含一些信息,一些字符串和一些浮点数。很简单;

我正在尝试做的是检查我的列表是否正确构建是使用Acao类中的getcMed()成员输出名为cMed的浮点数。

好的,首先:

我在尝试迭代列表时遇到三个错误,包括操作符=!=++

所有这些都是 - 分别是:

error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::_List_iterator<std::_List_val<std::_List_simple_types<Acao>>>' (or there is no acceptable conversion)

尽管我不认为在这种情况下真的很重要,但这些是我自己的libs:

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <list>
#include <stdlib.h>
#include <sstream>

现在,我对这段代码的第二个问题是:

cout << (*it)->getcMed();

我的list和迭代器it都属于Acao类型,但我的编译器(我使用VS 2013作为我的IDE和编译器)给出了以下错误:< / p>

错误C2039:'getcMed':不是'std :: list&gt;'的成员

这是有问题的代码块(另请注意:我正在使用命名空间std):

list<Acao> novaListaAcoes(){
fstream file;
streampos begin;
list<Acao> listaAcoes, it;
Acao A;
string linha, papel, companhia, tipo;
float min, med, max;

file.open("G:\\VS\\ConsoleApplication4\\BDINaux.txt");
file.clear();
file.seekg(0, ios::beg);
listaAcoes.clear();

while (!file.eof()){
    getline(file, linha);
    if (file.eof()){ break; }
    vector<char> vector(linha.begin(), linha.end());

    min = calcMin(vector);
    max = calcMax(vector);
    med = calcMed(vector);
    papel = lePapel(vector);
    companhia = leComapanhia(vector);
    tipo = leTipo(vector);
    vector.clear();
    A.setCompanhia(companhia);
    A.setCotacao(med, min, max);
    A.setNomePapel(papel);
    cout << papel<< endl;
    listaAcoes.push_back(A);
}

cout << "fim loop\n";
for (it = listaAcoes.begin(); it != listaAcoes.end(); ++it){
    cout << (*it)->getcMed();
}
return listaAcoes;
}

1 个答案:

答案 0 :(得分:0)

您的声明:

list<Acao> listaAcoes, it;

for循环初始值设定项中的赋值语句所需的类型不匹配:

for (it = listaAcoes.begin(); // <<<

it单独声明:

list<Acao>::iterator it;

迭代器是容器类的概念,但不等同于它们的类实例!

我个人更喜欢的习惯是声明最接近其用途的变量,例如for循环:

for (std::list<Acao>::iterator it = listaAcoes.begin();
     it != listaAcoes.end();
     ++it)
{
    // Access it's underlying Acao instance using -> or * dereference operators
}