簡體   English   中英

錯誤:沒有匹配函數調用&#39;boost :: shared_lock <boost::shared_mutex> :: shared_lock(const Lock&)&#39;

[英]error: no matching function for call to 'boost::shared_lock<boost::shared_mutex>::shared_lock(const Lock&)'

我已經實現了如下所示的ReadLock:

在我的myClass.h中

#include <boost/thread/locks.hpp>
#include <boost/thread/shared_mutex.hpp>

typedef boost::shared_mutex Lock;
typedef boost::shared_lock< Lock > ReadLock;

Lock myLock;

在myClass.cpp中:

void ReadFunction() const
{
    ReadLock r_lock(myLock); // Error!
    //Do reader stuff
}

該代碼在VS2010中有效,但在GCC4.0中失敗。 編譯器在ReadLock上拋出錯誤,表明沒有匹配的函數。 我懷疑變量myLock是“ const”正確性問題。 當我在函數聲明中刪除const時,錯誤消失了。 有人可以向我解釋嗎? 為什么這可以在Windows下工作,但不能在gcc下工作?

有什么建議嗎? 謝謝。

您應該從ReadFunction()刪除const限定符,因為使用cvref限定符限定非成員函數是非法的,甚至沒有任何意義。 或者將您要嘗試做的事情封裝在class


void ReadFunction() const
{
    ReadLock r_lock(myLock); // Error!
    //Do reader stuff
}

const只能應用於成員函數。 上面的代碼不是成員函數,如果是,則為成員函數(例如,名為MyClass的類):

void MyClass::ReadFunction() const
{
    ReadLock r_lock(myLock);
    //Do reader stuff
}

在這種情況下,您通常需要將lock設為mutable成員。 通過這樣聲明:

class MyClass{
    ....
    mutable Lock myLock;
};

暫無
暫無

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

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