Opened 8 years ago

Closed 8 years ago

Last modified 6 years ago

#271 closed баг (fixed)

Обращение к защищенным членам чужого класса

Reported by: alx Owned by: dimag
Priority: major Milestone: 2 очередь
Component: ПО MC04-Dispatcher. Пульт диспетчера/техника Keywords: compile protected gcc
Cc: san

Description

В r295 в StartupDlg.cpp в CStartupDlg::ConnectButton_pressed() добавлен такой код:

 connect(pInitializationThread, &InitializationThread::ProgressReport, this, &CStartupDlg::ProgressReport);
 connect(pInitializationThread, &InitializationThread::ErrorReport, this, &CStartupDlg::ErrorReport);
 connect(pInitializationThread, &InitializationThread::Done, this, &CStartupDlg::Done);

при том что InitializationThread::ProgressReport(), InitializationThread::ErrorReport() и InitializationThread::Done() являютс защищенными членами класса. Результат - ошибка компиляции.

Change History (7)

comment:1 by dimag, 8 years ago

Keywords: gcc added

Под Visual Studio компилируется нормально, видимо под gcc есть какие-то отличия.

comment:2 by alx, 8 years ago

А почему в процитированном фрагменте такое "странное" использование connect()?

Почему не

connect(pInitializationThread, SIGNAL(Done()), this, SLOT(Done()));

как во всех прочих подобных местах?

comment:3 by dimag, 8 years ago

В kubuntu тоже всё компилируется нормально.

comment:4 by dimag, 8 years ago

По аналогии из http://doc.qt.io/qt-5/qthread.html.
Там есть такой пример:
class WorkerThread : public QThread
{

Q_OBJECT
void run() Q_DECL_OVERRIDE {

QString result;
/* ... here is the expensive or blocking operation ... */
emit resultReady(result);

}

signals:

void resultReady(const QString &s);

};

void MyObject::startWorkInAThread()
{

WorkerThread *workerThread = new WorkerThread(this);
connect(workerThread, &WorkerThread::resultReady, this, &MyObject::handleResults);
connect(workerThread, &WorkerThread::finished, workerThread, &QObject::deleteLater);
workerThread->start();

}

comment:5 by dimag, 8 years ago

r299
Я переделал код в соотвествие с вашими рекомендациями.

comment:6 by dimag, 8 years ago

Resolution: fixed
Status: newclosed

comment:7 by san, 6 years ago

Milestone: Текущее2 очередь

Milestone renamed

Note: See TracTickets for help on using tickets.