2014-12-22 2 views
3

Я пытаюсь использовать std::thread. Мой поток должен вызвать метод и передать в качестве параметра struct, как показано на многих примерах. Кроме того, мой очень простой код не будет компилироваться. Для записи я знаю вопрос this, но ничего там мне не помогает.Не удается передать параметры в std :: thread?

Где я называю тему:

void Exporter::save() const { 
    thread(write_to_disk, this->parameter).detach(); 
} 

Подпись write_to_disk:

void write_to_disk(const Parameter& parameter) 

write_to_disk определяется в безымянном пространстве имен в файле .cpp.

я получаю следующее сообщение об ошибке:

src/Exporter.cpp:65:5: error: no matching constructor for initialization of 'std::__1::thread' 
    thread(write_to_disk, this->parameter).detach(); 
    ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/thread:374:9: note: candidate constructor template not viable: requires single argument '__f', but 2 arguments were provided 
thread::thread(_Fp __f) 
     ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/thread:263:5: note: candidate constructor not viable: requires 1 argument, but 2 were provided 
    thread(const thread&); 
    ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/thread:270:5: note: candidate constructor not viable: requires 0 arguments, but 2 were provided 
    thread() _NOEXCEPT : __t_(0) {} 
^ 
+1

[Вот MCVE, что соответствует описанию в вопросе и компилирует и работает просто отлично] (HTTP : //coliru.stacked-crooked.com/a/272e2157f5f62ebf). Можете ли вы предоставить [MCVE] (http://stackoverflow.com/help/mcve), что нет? – Casey

+0

[This] (http://coliru.stacked-crooked.com/a/82facb5aa54e073b) - это самое близкое, что я могу найти в своем коде, но он отлично работает. Я также попытался передать простой int в 'write_to_disk', и он терпит неудачу с той же ошибкой. Интересно, это проблема платформы ... – ruipacheco

+0

Кроме того, не уверен, что я доверяю этому онлайн-компилятору. Была синтаксическая ошибка, и она работала нормально. – ruipacheco

ответ

5

отлично работает для меня, если я

clang++ -std=c++11 test.cpp 
+1

clang ++ -std = C++ 11 исправил его. Я подозреваю, что CMake испортил мои файлы ниндзя. – ruipacheco

Смежные вопросы