2016-11-04 5 views
1

エラー:への呼び出しに該当する関数 'ブースト:: shared_lock <後押し:: shared_mutex> :: shared_lock(constのロック&)' 私は、次のような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では動作しませんか?

ここにお勧めしますか?ありがとう。

+0

mutable mutexを試しましたか? – Danh

+0

変更可能で問題を解決します!ありがとう! –

答えて

2

qualifying a non-member function with cvまたはREF修飾子は違法であるとさえ理にかなっていないので、あなたは、ReadFunction()からconst修飾子を削除する必要がありますどちらか。または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 
} 

その場合、あなたは一般的にlockmutableメンバーを作成する必要があります。

class MyClass{ 
    .... 
    mutable Lock myLock; 
}; 
関連する問題