2017-12-09 15 views
-1

こんにちは、Qtプログラム内でC++ 11スレッドを実装する際に問題が発生しています。スレッドと通信するためにデータ構造を使用していますが、Qtクラス内でスレッドを作成することはできません。私はまた、メインの内側にスレッドを作成することは許可されていません。私が取得しているエラーは、std :: invoke:一致するオーバーロードされた関数が見つかりませんでした。 Qtオブジェクト内のスレッド

class someapp : public QWidget { 
    Q_OBJECT 
public: 
    someapp(QWidget * parent = nullptr); 
private: 
    somedatastructure *a; 
}; 

someapp::someapp(QWidget * parent) : QWidget(parent) { 
    a = new somedatastructure; 
    std::thread t(&dosmth::doingsmth, a); 
    /* some UI stuff*/ 
} 

class dosmth{ 
public: 
    void doingsmth(somedatastructure &x); 
}; 

int main(int argc, char *argv[]){ 
    QApplication app(argc, argv); 
    someapp x; 
    x.show(); 
    return app.exec(); 
} 
+2

'dosmth'が' someapp :: someapp'と 'の#include 後に定義される'欠けています。両方の素晴らしい場所が調査を開始する。 – user4581301

+0

この問題は、Qtの使用に依存しないというヒントがあります。 'QWidget'基本クラスを削除することができます。今は何が間違っているのが明確になるはずです。 –

答えて

0

まず問題は、あなたが、ポインタと参照を混同しているということです

第二の問題(私はこれはタイプミスであると仮定)、スレッドがインスタンスで開始する必要があるということですオブジェクトのまたは代替的にそうような静的呼び出し、とおり

static void doingsmth(somedatastructure *x) 
関連する問題