c++ - 错误 : no matching function for call to 'boost::shared_lock<boost::shared_mutex>::shared_lock(const Lock&)'

标签 c++ boost constants 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 处抛出错误,指出没有匹配的函数。我怀疑是变量 myLock 的“常量”正确性问题。当我删除函数声明中的 const 时,错误消失了。谁能给我解释一下?为什么这在 Windows 下有效但在 gcc 下无效?

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

最佳答案

您应该从 ReadFunction() 中删除 const 限定符,因为 qualifying a non-member function with cvref 限定符是非法的,甚至没有意义;或者您将您尝试做的任何事情封装在一个中。


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

关于c++ - 错误 : no matching function for call to 'boost::shared_lock<boost::shared_mutex>::shared_lock(const Lock&)' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40414777/

相关文章:

c++ - 使用 const 指针初始化 const 结构

c++ - 在 Eclipse 中将参数传递给 C++ 程序

android - 无法使用位于不同目录中的头文件

boost - 如何使用 boost.asio 创建一个简单的服务器/客户端应用程序?

c++ - 我是否需要 1 个读者和 1 个作者的互斥锁,我不介意丢失一些写入?

c++ - 仅制作 const 对象的 const 拷贝

c++ - 如何让 Google Test 检测 Linux 上的线程数?

c++ - 输入一个未知数的整数流,并对其进行整数运算

C++,boost::numeric::ublas::mapped_matrix - 使用 std::tr1::unordered_map 而不是 std::map 时的迭代问题

ruby - 为什么没有赋值运算符允许我在没有编译器警告的情况下修改 Ruby 常量?