Я использую boost::thread
для вызова функции-члена класса из другой функции-члена того же класса. Объявление метода я хотел бы нить:boost :: thread in-class Member function call возвращает уникальная ошибка создания экземпляра
void ClassName::nnMetropolisStep(double random, std::vector<int> nums);
И я создаю темы из другой функции члена с помощью:
boost::thread* tThread = new boost::thread(&ClassName::nnMetropolisStep,
this,
someRandom,someNums);
Это единственные призывы к boost
функций в коде I» м используя.
Я видел в других вопросах, что этот синтаксис будет работать для нестатических функций-членов (и нет проблем с доступом с тем, как я создал потоки). Однако при компиляции я получаю следующую ошибку:
g++ -fPIC -std=c++11 -c -g -Wall `root-config --cflags --glibs` -MMD -c -o obj/IsingModel.o src/IsingModel.cpp
In file included from /usr/include/boost/thread/pthread/mutex.hpp:11:0,
from /usr/include/boost/thread/mutex.hpp:16,
from /usr/include/boost/thread/pthread/thread_data.hpp:12,
from /usr/include/boost/thread/thread.hpp:17,
from /usr/include/boost/thread.hpp:13,
from src/interface/IsingModel.h:11,
from src/IsingModel.cpp:11:
/usr/include/boost/thread/locks.hpp: In instantiation of 'boost::unique_lock<Mutex>& boost::unique_lock<Mutex>::operator=(boost::unique_lock<Mutex>&&) [with Mutex = boost::mutex]':
/usr/include/boost/thread/future.hpp:414:33: required from here
/usr/include/boost/thread/locks.hpp:269:22: error: cannot bind 'boost::unique_lock<boost::mutex>' lvalue to 'boost::unique_lock<boost::mutex>&&'
swap(temp);
^
/usr/include/boost/thread/locks.hpp:279:14: note: initializing argument 1 of 'void boost::unique_lock<Mutex>::swap(boost::unique_lock<Mutex>&&) [with Mutex = boost::mutex]'
void swap(unique_lock&& other)
^
make: *** [obj/IsingModel.o] Error 1
Что происходит? Ясно, что я либо делаю что-то неправильно, либо, что еще хуже, есть проблема с моей настройкой компилятора.
Вы получаете ошибку из-за boost :: unique_lock. Не из-за упомянутого вами кода. – Sumeet
@Sumeet Да, но почему я получаю это без каких-либо явных вызовов или включаю в unique_lock? –