1

我有一个带有类型非静态成员的小模板类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' 也会发生同样的情况。

我有另一个非模板类,在其中使用任何一种互斥锁类型都没有问题。

4

2 回答 2

3

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

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

于 2011-11-27T21:53:40.280 回答
-1

哼!我的问题的解决方案非常简单,但很难找到。我只是对声明的方法有问题const,因为储物柜正在改变互斥锁。我所要做的就是成功mutable

于 2011-11-28T21:14:06.550 回答