gpt4 book ai didi

c++ - 正确的线程调用语法?错误:没有对 std::thread::thread() 的匹配调用

转载 作者:太空宇宙 更新时间:2023-11-04 16:18:29 25 4
gpt4 key购买 nike

我正在尝试创建一个运行类函数的线程。我认为我做错事的地方靠近我得到的主要底部 RowChecker r0(puz, 0, s); thread rt0 {r0.check()}; .我的编译器 (g++) 告诉我有 no matching function for call to ‘std::thread::thread(<brace-enclosed initializer list>)’所以我知道我没有正确调用电话。格式化此调用以创建新线程的正确方法是什么?

#include <iostream>
#include <thread>

using namespace std;

class Sum
{
private:
int sum;
public:
Sum();
int getSum();
void addSum();
};

class RowChecker
{
private:
int puz[9][9];
int myRow;
Sum* sum;
public:
RowChecker(int puzzel[9][9], int row, Sum* shared);
void check();
};

Sum::Sum() {
sum = 0;
}

int Sum::getSum() {
return sum;
}

void Sum::addSum() {
++sum;
}

RowChecker::RowChecker(int puzzel[9][9], int row, Sum* shared) {
for (int i=0; i<9; ++i) {
for (int j=0; j<9; ++j) {
puz[i][j] = puzzel[i][j];
}
}
myRow = row;
sum = shared;
}

void RowChecker::check() {
char table[] = {0,0,0, 0,0,0, 0,0,0};
for (int i=0; i<9; ++i) {
if (puz[i][myRow]<10 && puz[i][myRow]>=0) {
table[puz[i][myRow]] = 1;
}
}
for (int i=0; i<9; ++i) {
if (table[i]==0) {
return;
}
}
sum->addSum();
}

void readPuzzel(int puz[9][9]){
for (int i=0; i<9; ++i) {
for (int j=0; j<9; ++j) {
puz[i][j] = rand() % 10;
}
}
}

int main()
{
Sum s;

int puz[9][9];
readPuzzel(puz);

RowChecker r0(puz, 0, &s);

thread rt0 {r0.check()};

rt0.join();

cout << "Sum s is " << s.getSum() << endl;

return 0;
}

抱歉篇幅过长。此外,我知道传递数组是引入错误的好方法。我打算将其切换为 vector 。

最佳答案

您需要将一个函数传递给thread 的构造函数。在您的代码中,您正在调用 r.check() 并将结果 传递给thread 的构造函数,并且采用此类参数的构造函数不存在,因此出现错误。

thread 构造函数接受一个函数和参数。在成员函数的情况下,第一个参数是 this 指针。因此,对于您的代码,您需要:

thread rt0 { &RowChecker::check, &r0 };

这将在 r0 上调用 RowChecker::check

关于c++ - 正确的线程调用语法?错误:没有对 std::thread::thread(<brace-enclosed initializer list>) 的匹配调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19915642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com