2013-04-28 4 views
1

У меня проблема при попытке использовать BOOST threads 1.53.0. Поскольку я новичок в BOOST, у меня теперь есть проблема, когда большой класс из проекта должен иметь некоторую обработку потока потоков.Ускорение мьютекса и доступа к классу

При составлении кода я продолжал получать ошибку:

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

Что читает через интернет я понял это, что с помощью lock_guard бустера, это оказалось заявление, как один ниже

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

Создает экземпляр класса и назначает его переменной processor. (или я не прав?). Что в принципе означает, что импульс теперь позволит мьютексу быть скопирован

Самого класса

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

я могу использовать указатели вместо как PointProcessor * процессор = новый PointProcessor (х, у, г) Проблемы заключается в том, это большое кодовый, и я не хочу, чтобы изменить остальные реализации PointProcessor* processor = new PointProcessor, где, как они просто PointProcessor processor = PointProcessor(x,y,z)

ответ

2

проблемы заключается в том, что здесь:

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

Вы создаете processor путем копирования инициализации, где временный типа PointProcessor по умолчанию построенного первым, а затем processor является копией, возведенной или перемещений возведенной из этого временного.

Однако boost::mutex не копируется и не перемещается (при условии, что семантика перемещения поддерживается вообще в версии Boost, которую вы используете), что объясняет, почему копирование-инициализация processor является незаконной.

Вы должны скорее построить свой объект через прямой инициализации, таким образом:

PointProcessor processor(x, y, z); 
+0

Я редактировал вопрос - вы, возможно, придется повторно ответ :) – 2013-04-28 13:12:23

+0

@Wajih: Отредактированный ответ :) –

+0

@Wajih: Это решение вашей проблемы? –