Я столкнулся с очень странной проблемой. Это похоже на описанный здесь: http://www.qtforum.org/article/20389/problems-with-qlist.html .
Когда я объявляю QList в своем заголовочном файле и пытаюсь использовать его в исходном файле, программа завершается с ошибкой сегментации.
Вот фрагмент:
файл threads.h:
class Corr2DThread
{
private:
QList<Sequence *> seqs_;
...
};
файл threads.cpp:
void Corr2DThread::addSequence(Sequence *seq)
{
QLOGX("Thread " << idx_ << " adding new sequence (" << seqs_.size() << "), name: '" << seq->name() << "'"); //this code fails due to call seqs_.size()
QLOGINC;
int activeCount = seq->activeItems();
Q_ASSERT(activeCount > 0);
QLOG("Contains " << activeCount << " active object images");
seqs_.append(seq);
QLOGDEC;
}
Однако, если я объявлю, что QList локально, все в порядке, как показано в коде ниже:
void Corr2DThread::addSequence(Sequence *seq)
{
QList<Sequence *> seqs_;
QLOGX("Thread " << idx_ << " adding new sequence (" << seqs_.size() << "), name: '" << seq->name() << "'");
QLOGINC;
int activeCount = seq->activeItems();
Q_ASSERT(activeCount > 0);
QLOG("Contains " << activeCount << " active object images");
seqs_.append(seq);
QLOGDEC;
}
Я провел много часов, пытаясь заставить это работать, без удачи / знания. Любой QT-гуру может объяснить, что здесь происходит?
Проверьте, не забыли ли вы на самом деле создать экземпляр класса. Далее я любезно советую вам использовать GDB. 1) gdb 2) установить дочерний режим follow-fork 3) run 4) Очевидно, вы поймете вашу ошибку сегментации — наберите «bt», чтобы увидеть обратную трассировку. 5) Я полагаю, что вы просто оперируете указателем Corr2DThread без инициализации его для созданного Corr2DThread.