gpt4 book ai didi

导致编译错误的类的 c++ mutex 成员

转载 作者:行者123 更新时间:2023-11-28 01:34:28 25 4
gpt4 key购买 nike

当我向 myClass 添加互斥锁成员时,我不确定为什么会发生这种情况(在此示例中为 mu):

Error   C2661   "'std::tuple<
void (__thiscall MyNameSpace::myClass::* )(void),MyNameSpace::myClass>::tuple': no overloaded function takes 2 arguments include\memory 2438
namespace MyNameSpace{
class myClass{
shared_ptr<myClass2> property;
mutex mu;

public:
myClass(shared_ptr<myClass2> arg):property(std::move(arg)) {

}
void Run(){
...........
}
}
class myClass2{
public:
myClass2(std::string str) {
trace(str);
}

}
}
int main(){
shared_ptr<myClass2> new_obj(new myClass2("somthing"));
thread(&myClass::Run, myClass(new_obj)).join();
.......other stuff.....
}

我该如何克服这个问题?

最佳答案

是编译错误,不是内存错误。

注意 std::mutex 不可复制。因此,包含它的类也变得不可复制。

猜测(因为您没有显示相关代码)您试图复制 myClass 的实例,这会导致上述编译错误。

特别是,您可以搜索代码中按值传递或返回 myClass 实例的位置。

更新:正如@NathanOliver 所指出的,上面片段中的这样一个地方是:

thread(&myClass::Run, myClass(new_obj))

创建临时 myClass 的地方。

关于导致编译错误的类的 c++ mutex 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49943491/

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