次のメソッドでプライベートメンバーとして MessageQueue クラスのブーストミューテックスを使用しています
void MessageQueue::Dequeuee()
{
Request rq(messageWareHouse.front().reqID,messageWareHouse.front().seq,
messageWareHouse.front().sMessage);
while(true)
{
boost::unique_lock<boost::mutex> lock(qMutex);
qCond.wait(lock);
**reqCollection**.find(messageWareHouse.front().reqID)->second.addSegments(messageWareHouse.front().seq,
messageWareHouse.front().sMessage );
}
....
reqCollection はマップです
map<size_t, Request> reqCollection;
内部リクエストでミューテックスを初期化しようとすると、以下のエラーが発生します
class Request
{
private:
size_t RequestID;
public:
boost::mutex qMutex;
Request(size_t requestID,size_t seq, std::string sMessage);
void addSegments(size_t seq, std::string sMessage);
};
ここでグーグルでこのエラーを検索した限り、問題の解決策は次のように述べられています
ミューテックスまたはミューテックスを含むクラスの (スマート) ポインターを配置する
しかし、これは、プロジェクト全体でポインターを渡すことによって 1 つのミューテックス変数しか使用できないということですか? ブーストがミューテックスを保護している理由
エラーは
エラー 7 エラー C2248: 'boost::mutex::mutex': クラス 'boost::mutex' で宣言されたプライベート メンバーにアクセスできません