不能使用boost :: shared_mutex

时间:2011-11-27 21:37:28

标签: c++ boost boost-mutex

我有一个小模板类,其中包含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'也是如此。

我有另一个非模板类,使用互斥锁类型我没有问题。

2 个答案:

答案 0 :(得分:3)

您需要使类不可复制,或实现您自己的复制和赋值运算符。 boost::mutex是不可复制的,因此您会收到此错误。

您可以从boost::noncopyable派生您的课程,以使其不可复制。

答案 1 :(得分:-1)

咦!我的问题的解决方案变得非常简单但很难找到。我只是在声明const的方法时遇到问题,因为储物柜正在改变互斥锁。我所要做的就是把它mutable