2014-07-12 6 views
0

У меня возникла очень странная проблема. Он аналогичен описанному здесь: http://www.qtforum.org/article/20389/problems-with-qlist.html. Когда я объявляю QList в своем заголовочном файле, и я пытаюсь использовать его в исходном файле, программа выходит из строя с ошибкой сегментации.Объявление 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 локально, everythig нормально, как и показанном в приведенном ниже кодексе:

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-гуру может объяснить, что здесь происходит?

+0

Qt не бросает исключения C++, не могли бы вы быть более конкретными относительно ошибки, которую вы получили? –

+0

Ошибка сегментации –

+0

Вы пытались запустить его в отладчик? Что такое обратная линия? –

ответ

2

Проверьте, не забыли ли вы фактически создать экземпляр класса. Затем я любезно советую вам использовать GDB. 1) gdb 2) установить дочерний режим следующего режима 3) запустить 4) Вы, очевидно, поймаете свою ошибку сегментации - введите «bt», чтобы увидеть обратную трассировку. 5) Я очень предполагаю, что вы просто работаете с указателем Corr2DThread, не инициализируя его созданным Corr2DThread.

+0

Это было фактически так. Указатель на Corr2DThread не был инициализирован в этом конкретном случае. Еще раз спасибо. –

+0

Всегда приветствуются. – Zorgiev