1

BOOST スレッド 1.53.0を使用しようとしたときに問題が発生しました。私は BOOST の初心者なので、プロジェクトの大きなクラスにスレッド モード処理が必要になるという問題があります。

コードをコンパイルしている間、私はエラーを受け取り続けました:

error C2248: 'boost::mutex::mutex' : cannot access private member declared in class 'boost::mutex'

オンラインで読んでいるのは、Boostのlock_guardを使用すると、以下のようなステートメントになることがわかりました

PointPorcessor processor = PointProcessor(x,y,z);

クラスのインスタンスを作成し、それをprocessor変数に割り当てています。(または私は間違っていますか?)。これは基本的に、ブーストがミューテックスのコピーを許可することを意味します

クラス自体

PointProcessor
{
boost::mutex mtex; // The one and only mutex
// Other members
};

代わりに PointProcessor* processor = new PointProcessor(x,y,z) のようにポインターを使用できます 問題は、これは大きなコードベースであり、残りの実装を変更したくないということですPointProcessor* processor = new PointProcessorPointProcessor processor = PointProcessor(x,y,z)

4

1 に答える 1

2

問題はここにあります:

PointPorcessor processor = PointProcessor(x, y, z);

copy-initializationprocessorによって作成しています。ここで、型のテンポラリは最初にデフォルト構築され、次にそのテンポラリからコピー構築またはムーブ構築されます。PointProcessorprocessor

ただし、boost::mutexはコピーも移動もできません (使用している Boost のバージョンで移動セマンティクスがサポートされている場合) processor

次のように、 direct-initializationを介してオブジェクトを構築する必要があります。

PointProcessor processor(x, y, z);
于 2013-04-28T13:08:15.417 に答える