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

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 限定词,因为 qualifying a non-member function with cvref 限定词是非法的,甚至不感觉;或者你将你想要做的任何事情封装在 class.


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

const只能应用于成员函数。上面的代码不是成员函数,如果是的话,它应该是,(例如,一个名为 MyClass 的 class):

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

在这种情况下,您通常需要让 lock 成为 mutable 成员。通过这样声明:

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