Проблема перебирая список

0

Я работаю над этим проектом, который в основном читает информацию из файла, использует эту информацию для объекта и создает список, содержащий объекты.

У меня есть класс под названием Acao который в основном содержит несколько фрагментов информации, некоторые строки и некоторые плавающие элементы. Довольно просто;

То, что я пытаюсь сделать, чтобы проверить, правильно ли построен мой список, - вывести float с именем cMed, используя getcMed() из класса Acao.

Хорошо, в первую очередь:

Я получаю три ошибки при попытке выполнить итерацию через свой список, имея с операторами = != И ++.

Все они - соответственно:

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)

Насколько я не думаю, что это действительно важно в этом случае, это мои включенные библиотеки:

#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 и компилятора) дают мне следующее сообщение об ошибке:

ошибка C2039: 'getcMed': не является членом 'std :: list>'

Вот кусок кода, о котором идет речь (также обратите внимание: я использую для этого пространство имен 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;
}
  • 0
    for (it = : it был какой тип снова, пожалуйста? Как насчет использования auto или list<Acao>::iterator ?
  • 0
    там объявлено в строке: list<Acao> listaAcoes, it; Я не знаю об auto , и я попробую решение list<acao>::iterator со list<acao>::iterator , спасибо за ответ.
Показать ещё 3 комментария
Теги:
class
list
iterator
member

1 ответ

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 underlying Acao instance using -> or * dereference operators
}
  • 0
    Спасибо за ответ. Это действительно сработало как решение. Что касается второй части моей проблемы: замена (*it)->getcMed(); с it->getcMed(); работал как шарм. Спасибо за помощь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню