簡體   English   中英

c ++互斥類成員導致編譯錯誤

[英]c++ mutex member of class causing compilation Error

當我向 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位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM