#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 , 8 years ago
Keywords: | gcc added |
---|
comment:2 by , 8 years ago
А почему в процитированном фрагменте такое "странное" использование connect()?
Почему не
connect(pInitializationThread, SIGNAL(Done()), this, SLOT(Done()));
как во всех прочих подобных местах?
comment:4 by , 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:6 by , 8 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Под Visual Studio компилируется нормально, видимо под gcc есть какие-то отличия.