concurrency::critical_section
не является ни копируемым, ни перемещаемым (это было сделано старомодным способом создания его конструктора копирования private
, отсюда и ошибка, которую вы получаете). Следовательно, Class1
в том виде, в котором он написан, нельзя ни скопировать, ни переместить, и вы не можете push_back
его 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 &)'
person
T.C.
schedule
21.08.2014
concurrency::critical_section
нельзя скопировать. - person T.C.   schedule 21.08.2014Class2 c2();
не объявляет объектc2
. Он объявляет его как функцию, возвращающуюClass2
- person Ajay   schedule 21.08.2014