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 に答える