26

いくつかのデータ メンバーを持つクラスと、非公開にするデータ メンバーにアクセスできる関数を定義できるようにしたいと考えています。

次に、クラスのデータ メンバーを操作するいくつかのスレッドを作成するパブリック関数が必要です。コードをコンパイルするのに問題があります。

ミューテックスやデータ保護について心配する必要はありません。これはテスト用のサンプル コードにすぎないため、問題にはなりません。

class foo {
    public:
    void make_foo_func_threads();

    private:
    void foo_func();

    char private_data;
    std::vector<std::thread> some_threads;
}

void foo::foo_func() {
    while(1) {
        private_data = 'A';
    }
}

void foo::make_foo_func_thread() {
    for(...) some_threads.push_back(std::thread(foo_func));
    for(...) some_threads.join();
}

コンパイラは私にエラーを与えています:

「std::thread::thread() への一致する呼び出しがありません」

どうやら、「引数 1 から<unresolved overloaded function type>への既知の変換はありませんvoid (foo::*&&)'

ええと、コンパイラが foo_func を解決する方法を理解するのに苦労していることを除けば、それが何を意味するのかわかりません-私は思います。

私がやろうとしていることをコンパイラーが理解できるようにするにはどうすればよいでしょうか。私が書いたコードが違法であることは間違いありません。もしそうなら、誰かが私にその理由を説明してくれませんか。ありがとう!

4

1 に答える 1