Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;类的互斥体成员导致编译错误_C++_Multithreading_C++11_Memory_Mutex - Fatal编程技术网

C++ c++;类的互斥体成员导致编译错误

C++ c++;类的互斥体成员导致编译错误,c++,multithreading,c++11,memory,mutex,C++,Multithreading,C++11,Memory,Mutex,我不确定在我向myClass添加互斥体成员时为什么会发生这种情况(在本例中为mu): 错误C2661“'std::tuple< void(uu thiscall MyNameSpace::myClass::*)(void),MyNameSpace::myClass>::tuple::没有重载函数接受2个参数,包括\memory 2438 名称空间MyNameSpace{ 类myClass{ 共有财产; 互斥mu; 公众: myClass(共享参数):属性(std::move(参数)){ } 无

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

错误C2661“'std::tuple<
void(uu thiscall MyNameSpace::myClass::*)(void),MyNameSpace::myClass>::tuple::没有重载函数接受2个参数,包括\memory 2438
名称空间MyNameSpace{
类myClass{
共有财产;
互斥mu;
公众:
myClass(共享参数):属性(std::move(参数)){
}
无效运行(){
...........
}
}
类别myClass2{
公众:
myClass2(标准::字符串str){
微量元素(str);
}
}
}
int main(){
共享的新对象(新myClass2(“somthing”);
线程(&myClass::Run,myClass(new_obj)).join();
……其他东西。。。。。
}

我怎样才能克服这个问题呢?

这是一个编译错误,而不是内存错误

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

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

特别是,您可以在代码中搜索位置,通过值传递或返回
myClass
实例

更新:正如@NathanOliver所指出的,上述片段中的这样一个位置是:

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

创建了一个临时的
myClass

这是一个编译错误,而不是内存错误

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

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

特别是,您可以在代码中搜索位置,通过值传递或返回
myClass
实例

更新:正如@NathanOliver所指出的,上述片段中的这样一个位置是:

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

其中创建了一个临时的
myClass

“内存错误“表明您损坏了数据,这是一个运行时错误。这不是你所做的。无论如何;也许您应该发布整个错误消息,而不是其中的一小部分?我不知道我的2438行是否与您的相同。如果您希望我们分享一个最小的、可复制的示例,请与我们分享help@Ron这是myClass成员的姓名请使用或
线程(&myClass::Run,myClass(new_obj)).join()回答您的问题我认为这一行应该得到更多的关注-它是UB(创建线程对象后,线程运行在哪个对象上?)和一个糟糕的概念混合在一起(如果您只是要加入线程,为什么要创建线程?“内存错误”表明这是一个运行时错误,您已经损坏了数据。这不是你所做的。无论如何;也许您应该发布整个错误消息,而不是其中的一小部分?我不知道我的2438行是否与您的相同。如果您希望我们分享一个最小的、可复制的示例,请与我们分享help@Ron这是myClass成员的姓名请使用或
线程(&myClass::Run,myClass(new_obj)).join()回答您的问题我认为这一行应该得到更多的关注-它是UB(创建线程对象后,线程在哪个对象上运行?)和一个糟糕的概念混合在一起(如果你只是想加入它,为什么要创建线程?)否没有尝试在my中复制myClass的实例code@Amir拉斯蒂……或者你只是不知道有这样的企图。@AmirRasti是的,
线程(&myClass::Run,myClass(new_obj))
@IgorR。嗯<代码>myClass(新建对象)
创建一个临时的
myClass
std::thread的构造函数将其复制到线程中storage@IgorR. 那不行
std::mutex
不可复制或移动,因此
myClass
也将不可复制。不,没有尝试在myClass中复制myClass的实例code@Amir拉斯蒂……或者你只是不知道有这样的企图。@AmirRasti是的,
线程(&myClass::Run,myClass(new_obj))
@IgorR。嗯<代码>myClass(新建对象)
创建一个临时的
myClass
std::thread的构造函数将其复制到线程中storage@IgorR. 那不行
std::mutex
不可复制或移动,因此
myClass
也将如此。
thread(&myClass::Run, myClass(new_obj))