2016-10-24 8 views
-1

文脈に入れてみましょう。 Qt Creatorを使ってチャットボックスを作っています。私はC++には新しかったので、それは難しいことです。 std::threadを使用してスレッドを作成したいと思います。ここで私が書いたコードは次のとおりです。クラスの中でスレッドを作るとエラーが出るC2664

class Window: public QWidget 
{ 
Q_OBJECT 

public: 
Window(); 

public slots: 
    void Config(); 

private: 
    void ListenToClients(Server server); 

    //member... 
}; 
window.h

window.cpp

Window::Window(): QWidget() 
{ 
    //not important code...  

    do 
    { 
     //nothing 
    }while(config.getLaunch() == false); 

    Server myServer(config.getPort(), config.getBroadcast()); 
    std::thread serverThread(&Window::ListenToClients, this, myServer); 

} 

void Window::Config() 
{ 
    config.exec(); 
} 

void Window::ListenToClients(Server server) 
{ 
    for(int i = 0; i < 100; i++) 
    { 
     server.ListenNewConnections(); 
    } 
} 

だから私はこのエラーを取得する:erreur:C2664:'std::tuple<void (__cdecl Window::*)(Server),Window *,Server>::tuple(std::tuple<void (__cdecl Window::*)(Server),Window *,Server> &&)'ÿ: imossible to convert argument 1 of 'void (__cdecl Window::*)(Server)' in 'std::allocator_arg_t'

私は見当がつかないなぜ、そしてそれが何を意味するのか。私はちょっと調べましたが、誰もこのようなエラーがなかったようです。だから、私は皆さんを信じています。

答えて

0

「のstd :: allocator_arg_tは、」あなたのコンストラクタが関与しているようにそれが何か配分されているので、聞こえる:

Window::Window(): QWidget()が有効ではありません、あなたはすでにあなたのクラスdeclerationにQWidgetから継承されたが、そうQWidgetののコンストラクタが呼び出されます暗黙のうちに。 Window::Window()で十分です。

また、public slots:は何を意味するのかわかりません。上にすでにpublic:修飾子があるので、これを完全に省略することができます。

+0

'public slots'はQt拡張子です。' Config() '関数をスロットにしたい場合、opは省略できません。 – Mike

+1

'Window :: Window():QWidget()'は有効ですが、引数なしで 'QWidget()'を呼び出す必要はありません(これは通常 'QWidget'のコンストラクタに引数を渡すときにのみ行われます)。 – Mike

関連する問題