c++ 未找到匹配的重载函数-线程

qlvxas9a  于 2023-01-10  发布在  其他
关注(0)|答案(1)|浏览(131)

对于下面的代码片段,我一直收到调用错误C6272。我尝试了多种方法-使用ref传递,不使用ref传递,甚至作为简单线程进行测试。对于上下文,成员函数是一个将两个稀疏矩阵相乘并将它们添加到链表的函数。如果不使用线程,该函数工作正常,但线程返回错误。

mutex m;
vector<thread> a;
for (int q = 0; q < rhs.num_columns_; q++) { 
    a.push_back(thread(&SparseMatrix::mul_node, rhs_rows, lhs_rows, q, ref(newMatrix), ref(m)));
}
for (thread& t : a) {
    t.join();
}

穆尔_node函数的声明

void SparseMatrix::mul_node(vector<vector<int>> rhs, vector<vector<int>> lhs, int pos_rhs, row_node* &newMatrix, mutex &m) const`

我还没能找到解决上述问题的方法,请让我知道到底是什么导致了这个问题,我可以如何解决它?谢谢

ykejflvf

ykejflvf1#

因为成员函数不是static,所以你也需要将一个指向SparseMatrix的 * instance * 的指针传递给std::thread构造函数。
简化示例:

#include <iostream>
#include <thread>

struct foo {
    ~foo() {
        if(th.joinable()) th.join();
    }

    void run() {
        th = std::thread(&foo::thread_func, this, 10, 20);
        //                                  ^^^^
    }

    void thread_func(int a, int b) {
        std::cout << "doing the stuff " << a << ' ' << b << '\n';
    }

    std::thread th;
};

int main() {
    foo f;
    f.run();
}

这里1020作为参数传递给this->thread_func

相关问题