2016-11-04 90 views
1

我實現了一個ReadLock類似以下內容:錯誤:調用沒有匹配的函數 '的boost :: shared_lock <提振:: shared_mutex> :: shared_lock(常量樂扣樂)'

在我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下運行?

此處有任何建議嗎?謝謝。

+0

你試過可變互斥嗎? – Danh

+0

mutable解決問題!謝謝! –

回答

2

您應該從ReadFunction()刪除const預選賽,因爲qualifying a non-member function with cv裁判預選賽是非法的,甚至不有道理;或者你封裝了你在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; 
}; 
相關問題