ошибка C2440: '=': невозможно преобразовать из 'std :: list <std :: string, std :: allocator <_Ty >> *' в 'std :: string *'

0

В настоящее время я изучаю, как использовать списки в C++ (и C++ в целом), введя строковые значения в список, в цикле do-while, а затем распечатать их из списка в цикле for, но столкнулись с ошибкой:

error C2440: '=': cannot convert from 'std::list<std::string,std::allocator<_Ty>> *'
                                   to 'std::string*'

Ошибка относится к этой конкретной строке:

output = &container[k];

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

Я был бы признателен, если бы любые ответы могли быть сформулированы как можно проще, спасибо.

Остальная часть кода:

#include <iostream>
#include <string>
#include <list>
using namespace std;

void main()
{

int i = 0;
list<string> container[10];
string input, *output;  

do{
    cout << "enter a value for container location " << i << endl;
    cin >> input;
    container[i].push_back(input);
    i++;
}while (i < 10);

for (int j = 0, k = 0; j < 10; j++)
{
    output = &container[k];
    cout << "Value of container location " << j << " = " << *output << endl;
    k++;
}
}
  • 1
    main имеет тип возврата int ...
Теги:
compiler-errors

2 ответа

0
Лучший ответ

На основе вашего кода вы явно подразумеваете, что ваш тип для container должен быть vector<string> без [10] или просто string (при сохранении спецификации массива).

  • 0
    Следуя вашему совету, я изменил список на вектор и удалил все квадратные скобки при каждом упоминании контейнера, кроме строки, где произошла ошибка, и теперь она работает нормально. Спасибо вам за помощь!
0

Pignaut, вы объявляете массив (размером 10) списка String, поэтому каждый элемент массива представляет собой список строк. Вот почему эта ошибка. Но, я думаю, вы хотите объявить список строк.

Ещё вопросы

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