我有一个小模板类,其中包含boost::shared_mutex
类型的非静态成员。每当我尝试编译它时,我都会收到错误:
'boost::shared_mutex::shared_mutex' : cannot access private member declared in class 'boost::shared_mutex'
。
boost::shared_mutex
确实有一个私有的嵌套类shared_mutex
,但我不明白为什么会出现这个问题。
这是我的班级:
#include <boost/thread.hpp>
#include <boost/thread/shared_mutex.hpp>
#include <queue>
template <typename T>
class CThreadSafeQueue
{
public:
CThreadSafeQueue();
private:
boost::mutex _sharedMutex;
std::queue<T> _queue;
};
template <typename T>
CThreadSafeQueue<T>::CThreadSafeQueue()
{
}
常规`boost :: mutex'也是如此。
我有另一个非模板类,使用互斥锁类型我没有问题。
答案 0 :(得分:3)
您需要使类不可复制,或实现您自己的复制和赋值运算符。 boost::mutex
是不可复制的,因此您会收到此错误。
您可以从boost::noncopyable
派生您的课程,以使其不可复制。
答案 1 :(得分:-1)
咦!我的问题的解决方案变得非常简单但很难找到。我只是在声明const
的方法时遇到问题,因为储物柜正在改变互斥锁。我所要做的就是把它mutable
。