错误:调用'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&)'

本文关键字:shared lock boost 函数 Lock lt 错误 调用 mutex gt const      更新时间:2023-10-16

我已经实现了一个ReadLock如下:

In my 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;
};