无法将参数 1 从"常量提升::shared_mutex"转换为"常量提升::shared_lock<Mutex> &"
cannot convert parameter 1 from 'const boost::shared_mutex' to 'const boost::shared_lock<Mutex> &'
我只是想实现这个关于拥有100多个赞成票的互斥体的答案。我所做的只是复制粘贴代码,这样我的课读起来(简化)如下:
mymutexclass.h
class MyMutexClass {
public:
void write( uint32_t id, const std::string &str );
std::string read( uint32_t id ) const;
private:
boost::shared_mutex _access;
std::map<uint32_t, std::string> strings;
};
mymutexclass.cpp
void MyMutexClass::write( uint32_t id, const std::string &str ) {
boost::unique_lock< boost::shared_mutex > lock(_access);
strings[id] = name;
}
std::string MyMutexClass::read( const uint32_t id ) const {
boost::shared_lock< boost::shared_mutex > lock(_access); // ERROR HERE
if( strings.count( id )>0)
return strings.at(id);
else
return "No value.";
}
我得到一个错误,只针对读取互斥锁行:
error C2664: 'boost::shared_lock<Mutex>::shared_lock(const boost::shared_lock<Mutex> &)' : cannot convert parameter 1 from 'const boost::shared_mutex' to 'const boost::shared_lock<Mutex> &' D:... path ...mymutexclass.cpp
我完全迷失在错误中——它抱怨的类型之间有什么区别?我的意思是,从错误:
- 来自
const boost::shared_mutex
- 至
const boost::shared_lock<Mutex> &
我做错了什么?这个关联的答案被投了100次赞成票,所以我想它很可能是正确的。
因为您的方法有const
签名,所以不允许更改互斥对象的状态,因此不允许锁定它。将互斥对象更改为mutable
应该可以修复错误:
mutable boost::shared_mutex _access;
相关文章:
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 什么时候在C++中返回常量引用是个好主意
- 代理对象的常量正确性
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 通过多个头文件使用常量变量
- 在cuda线程之间共享大量常量数据
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 是默认情况下分配给char数组常量的值
- 私有类型的静态常量成员
- 类似枚举的计算常量
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么我可以通过引用修改常量返回
- 如何创建长度由常量参数指定的数组
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 隐式常量/非常量运算符布尔
- 非常量变量只读位置的赋值
- constexpr构造函数需要常量成员函数时出现问题