Я работаю над своим первым приложением Qt, действительно, с помощью виджета, и у меня возникает ошибка, когда я пытаюсь заполнить карту стандартной библиотеки <int, QString>
пара. Моя цель — заполнить карту ключами int и значениями QString. Я не знаю, является ли пара лучшим способом сделать это, поэтому любой совет будет отличным.
Вот единственный исходный файл, кроме основного.
#include "linuxtips.h"#include "ui_linuxtips.h"
LinuxTips::LinuxTips(QWidget *parent) :
QWidget(parent),
ui(new Ui::LinuxTips)
{
loadRandTip();
ui->setupUi(this);
}
LinuxTips::~LinuxTips()
{
delete ui;
}
void LinuxTips::on_learnMore_clicked()
{
}
void LinuxTips::on_viewAll_clicked()
{
}
void LinuxTips::loadRandTip()
{
int i = 0;
std::map<int, QString>::iterator it;
QString line;
QFile inputFile(":/tipFile.txt");
inputFile.open(QIODevice::ReadOnly);
QTextStream in(&inputFile);
do{
line = in.readLine();
// this->TipMap.insert(it, std::pair<int, QString >(i,line));
i++;
}while(!in.atEnd());
}
Если я раскомментирую this->TipMap.insert(it, std::pair<int, QString >(i,line));
тогда он будет работать. Так как это ошибка сегмента, я уверен, что это переполнение памяти или нулевой указатель, но я просто не уверен, что это такое. Спасибо за любую помощь.
Я собираюсь предположить, что ваш сбой происходит из-за этих строк:
std::map<int, QString>::iterator it;
this->TipMap.insert(it, std::pair<int, QString >(i,line));
Вы пытаетесь вставить карту, используя недопустимый (неинициализированный) итератор. Вы запускаете это в отладке или выпуске? Вы должны получить утверждение в отладке.
Других решений пока нет …