错误:调用'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如下:
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
限定符,因为用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;
};
相关文章:
- 尝试构建"lock-free"数据结构C++
- 为什么 c++11 std::lock 和 std::scoped_lock 至少需要 2 个参数?
- 为什么"weak.lock()"返回"nullptr" "auto weak=std::make_shared<int>(42);"的定义?
- 引用 std::shared:ptr 以避免引用计数
- DRD 报告"conflicting load" std::mutex::lock 上的错误
- 在 std::tie 中使用 std::weak_ptr::lock()
- std::lock_guard 怎么可能比 std::mutex::lock() 更快?
- std::mutex::lock() 产生奇怪(和不必要的)ASM 代码
- "lock cmpxchg"如何在装配中工作?
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- 无法使用 libtool 将 -shared 参数传递给 g++
- std::lock 仍然导致死锁
- 链接 boost 库时"Error while loading shared libraries"引发的,除了我无法使用 root 访问权限来修复它
- 解决方法:'can not be used when making a shared object; recompile with -fPIC'使用Cmake。使用普通的 g++ 工作
- 在任何地方对C++中所有并行线程中的所有锁定和解锁实例使用相同的 std::mutex 和 lock 对象
- 我们是否需要对多线程 x32 系统使用 lock 来读取或写入 uint32_t 变量
- 使用Mutex,lock_guard,在课堂中正确地lock
- gcc -fPIC vs. -shared
- 在shared_from_this()中的错误类型(在继承类中)(是否有dyn.type-ware shared Poi
- 当我调用lock()时,为什么std :: mutex会引发异常