错误:没有匹配函数来调用&#39; boost :: shared_lock <boost :: shared_mutex> :: shared_lock(const Lock&amp;)&#39;

时间:2016-11-04 03:24:21

标签: c++ boost const mutex boost-mutex

我已经实现了如下的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上抛出错误,说没有匹配的函数。我怀疑是&#34; const&#34;变量myLock的正确性问题。当我删除函数声明中的const时,错误消失了。任何人都可以向我解释一下吗?为什么这可以在windows下工作但不能用gcc工作?

这里有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:2)

您应该从const移除ReadFunction()限定符,因为qualifying a non-member function with cv ref 限定符是非法的,甚至没有意义;或者你在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;
};