gpt4 book ai didi

C++ 函数调用缺少参数列表;使用 '&Runner::runTask' 创建指向成员的指针

转载 作者:行者123 更新时间:2023-11-30 03:38:02 25 4
gpt4 key购买 nike

这个问题之前似乎已经在 SO 上得到了回答,但是尽管查看了其他解决方案,我仍然无法弄清楚为什么会出现错误:

function call missing argument list; use '&Runner::runTask' to create a pointer to member

我有一个类Runner它将负责调度任务以异步地在单独的线程上运行任何子工作。

start我的运行者的方法我有以下代码:

void start(const bool runTaskAsync = true)
{
if(!isRunning()) return;

running = true;

if(runTaskAsync)
{
Worker = std::thread(runTask, this);
}
else
{
this->runTask();
}
}

编译器不喜欢的麻烦行是:Worker = std::thread(runTask, this); .根据给出的错误(以及本网站上提出的其他问题,我尝试执行以下操作)

Worker = std::thread(&Runner::runTask);

但是我仍然遇到同样的错误。 runTask方法是 Runner 上的私有(private)方法类,定义为:

void runTask()
{
while(isRunning())
{
// this_thread refers to the thread which created the timer
std::this_thread::sleep_for(interval);
if(isRunning())
{
// Function is a public method that we need to call, uses double parens because first calls the function called Function
// and then the second set of parens calls the function that the calling Function returns
Function()();
}
}
}

调用Function()()调用传递给 Runner 的模板函数instance, task 的 Runners 私有(private)成员变量签名为 std::function<void(void)> task;和执行 Function()()签名为:

const std::function<void(void)> &Function() const 
{
return task;
}

调用时(据我所知)将运行 Function()然后将运行 task()

如果需要任何其他详细信息,请告诉我。我目前没有实例化 Runner 的任何实例, 我只是包括了 Runner.h在我的 main.cpp文件以查看它是否可以编译。

最佳答案

Based on the error given (and the other questions asked on this site, I attempted to do the following)

Worker = std::thread(&Runner::runTask);

应该是:

 Worker = std::thread(&Runner::runTask, this);

每个非静态成员函数都有一个隐式的 this ,当您想将该成员函数传递给 std::thread 时,它会被公开(并且是必需的)

关于C++ 函数调用缺少参数列表;使用 '&Runner::runTask' 创建指向成员的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39821922/

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