0

私はshared_ptrとmutex(ブーストするかどうか)の両方の概念に不慣れです。私は自分のクラスでそれを使おうとしています:

typedef boost::shared_mutex Lock;
typedef boost::unique_lock< Lock > WriteLock;
typedef boost::shared_lock< Lock > ReadLock;

class subscriptionInfo 
{
public:
//this is not a copy constructible class. so I have to use shared pointer
boost::shared_ptr<Lock> myLock; 
...
}
...
std::vector<DATA_MSG_PTR>& subscriptionInfo::getIncoming() {
    ReadLock Lock(myLock);
    return incoming;
}

エラーは次のようになります。

error: no matching function for call to ‘boost::shared_lock<boost::shared_mutex>::shared_lock(boost::shared_ptr<boost::shared_mutex>&)’

私が台無しにしたこととそれを解決する方法を見つけるのを手伝っていただければ幸いです。ありがとう

4

1 に答える 1

1

メンバーはmyLockポインターです。賢いものですが、とにかくポインタです。shared_lockコンストラクターは、ポインターではなく、ミューテックスオブジェクトへの参照を受け入れます。そのため、エラーメッセージが表示されます。この問題を解決するには、ポインタを次のように逆参照する必要があります。ReadLock Lock(*myLock);

于 2013-03-25T13:07:16.990 に答える