concurrency::critical_section
コピー可能でも移動可能でもありません(これは、コピーコンストラクターを作成する昔ながらの方法で行われたprivate
ため、エラーが発生します)。したがって、Class1
書かれているように、コピーも移動もできずpush_back
、ベクトルにすることもできません。
これを修正するには、コピーのみを行う独自のコピー コンストラクターとコピー代入演算子を記述しますf1
。
class Class1
{
public:
concurrency::critical_section _cs;
int f1;
Class1(int f) : f1(f) { }
Class1(const Class1 &other) : f1(other.f1) { }
Class1 & operator=(const Class1 &other) {
// synchronization omitted
f1 = other.f1;
}
};
補足:値で初期化されたオブジェクトではなく、 をClass2 c2();
返す関数を宣言します。Class2
補足 2: VS の「エラー リスト」のエラー メッセージは、一般的に不完全です。完全なエラー ログについては、ビルド出力を確認する必要があります。この場合、VS2013 の完全なエラー ログは次のとおりです。
ConsoleApplication2.cpp(15): error C2248: 'Concurrency::critical_section::critical_section' : cannot access private member declared in class 'Concurrency::critical_section'
D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\concrt.h(3712) : see declaration of 'Concurrency::critical_section::critical_section'
D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\concrt.h(3549) : see declaration of 'Concurrency::critical_section'
This diagnostic occurred in the compiler generated function 'Class1::Class1(const Class1 &)'