Невозможно использовать boost :: shared_mutex - PullRequest
1 голос
/ 28 ноября 2011

У меня есть небольшой шаблонный класс с нестатическим членом типа 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 ]

3 голосов
/ 28 ноября 2011

Вам необходимо сделать класс не копируемым или реализовать собственный оператор копирования и присваивания.boost::mutex не подлежит копированию, поэтому вы получаете эту ошибку.

Вы можете извлечь свой класс из boost::noncopyable, чтобы сделать его недоступным для копирования.

0 голосов
/ 29 ноября 2011

Ха!Решение моих проблем оказалось очень простым, но очень трудным для поиска.У меня были проблемы только с методами, объявленными const, потому что в шкафчиках происходят мутации.Все, что мне нужно было сделать, это сделать mutable.

...