Ошибка: «Попытка использовать удаленную функцию» при перемещении обещания - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь написать пример с обещанием / будущим. На примере в этой справочной странице они делают это, и это прекрасно работает в их онлайн-компиляторе. Когда я делаю это на моем Mac (с исходным кодом внизу), я получаю эту ошибку, указывающую на отсутствие оператора перемещения. Может кто-нибудь сказать мне, что не так?

Заголовочный файл:

#ifndef Demonstration9_hpp
#define Demonstration9_hpp

#include <iostream>
#include <thread>
#include <future>

using namespace std;

inline namespace demo9
{
    class Demonstration9
    {
    private:
        bool Job1();
        void Job2();

    public:
        void Run();
    };
}

#endif /* Demonstration9_hpp */

Исходный файл:

#include "Demonstration9.hpp"

bool job1(string test_string)
{
    this_thread::sleep_for(chrono::milliseconds(500));
    return test_string == "test";
}

void job2()
{
    this_thread::sleep_for(chrono::milliseconds(500));
}

bool Demonstration9::Run()
{
    promise<bool> j1_promise;
    future<bool> j1_future = j1_promise.get_future();
    thread t1(job1, "test", move(j1_promise));
    j1_future.wait();  // wait for result
    cout << "result=" << j1_future.get() << '\n';
    t1.join();  // wait for thread completion

    // Demonstrate using promise<void> to signal state between threads.
    promise<void> j2_promise;
    future<void> j2_future = j2_promise.get_future();
    thread t2(job2, move(j2_promise));
    j2_future.wait();
    t2.join();
}

Журнал сборки:

В файле из /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.cpp:9: В файл включен из /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.hpp:13: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:342:5: ошибка: попытка использовать удаленную функцию __invoke (_VSTD :: move (_VSTD :: get <1> (__t)), _VSTD :: move (_VSTD :: get <_Indices> (__t)) ...); ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:352:5: примечание: в реализации специализации шаблона функции 'std :: __ 1 :: __ thread_execute>, bool (*) (std :: __ 1 :: basic_string), const char *, std :: __ 1 :: обещание, 2, 3> 'запрашивается здесь __thread_execute ( __p, _Index ()); ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:368:47: примечание: в реализации специализации шаблона функции 'std :: __ 1 :: __ thread_proxy>, bool (*) (std :: __ 1 :: basic_string), const char *, std :: __ 1 :: обещание>> 'запрашивается здесь int __ec = __libcpp_thread_create (& __t_, & __ thread_proxy <_Gp>, __p.get ()); ^ /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.cpp:26:12: примечание: в реализации специализации шаблона функции 'std :: __ 1 :: thread :: thread), символ const (&) [5], std :: __ 1 :: обещание, void> 'запрашивается здесь поток t1 (job1, «тест», move (j1_promise)); ^ В файле, включенном в /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.cpp:9: В файл включен из /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.hpp:12: В файл включен из /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/iostream:38: В файле из /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/ios:216: В файле из /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__locale:15: В файле из /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string:470: В файле из /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string_view:169: В файле из /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__string:56: В файле из /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/algorithm:640: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:1590:5: примечание: '~ __nat' здесь явно помечено как удаленное ~ __nat () = удалить; ^ В файле, включенном в /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.cpp:9: В файл включен из /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.hpp:13: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:342:5: ошибка: попытка использовать удаленную функцию __invoke (_VSTD :: move (_VSTD :: get <1> (__t)), _VSTD :: move (_VSTD :: get <_Indices> (__t)) ...); ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:352:5: примечание: в реализации специализации шаблона функции 'std :: __ 1 :: __ thread_execute>, void (*) (),std :: __ 1 :: обещание, 2> 'запрашивается здесь __thread_execute ( __p, _Index ()); ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:368:47: примечание: в реализации специализации шаблона функции 'std :: __ 1 :: __ thread_proxy>, void (*) (), std :: __ 1 :: обещание>> 'запрашивается здесь int __ec = __libcpp_thread_create (& __t_, & __ thread_proxy <_Gp>, __p.get ()); ^ /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.cpp:34:12: примечание: в реализации специализации шаблона функции 'std :: __ 1 :: thread :: thread, void>' просили здесь поток t2 (job2, move (j2_promise)); ^ В файле, включенном в /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.cpp:9: В файл включен из /Users/maurits/Github/CPP-Demonstrations/src/Demonstration9.hpp:12: В файл включен из /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/iostream:38: В файле из /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/ios:216: В файле из /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__locale:15: В файле из /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string:470: В файле из /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string_view:169: В файле из /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__string:56: В файле из /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/algorithm:640: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:1590:5: примечание: '~ __nat' здесь явно помечено как удаленное ~ __nat () = удалить; ^ 2 сгенерированных ошибки.

1 Ответ

0 голосов
/ 07 мая 2018

Линия

thread t1(job1, "test", move(j1_promise));

пытается вызвать

job1("test", move(j1_promise));

в отдельной теме. Но ваш job1 принимает только один аргумент.

...