C++ ASIO使用已删除的函数C++;

C++ ASIO使用已删除的函数C++;,c++,C++,帖子中提到的项目可以在@ 在尝试运行一个旨在接收任意DAB+数据的旧项目时,我在构建该项目时遇到了一个问题 /home/daan/data-over-dab-example/src/receiver.cpp: In function ‘int main(int, char**)’: /home/daan/data-over-dab-example/src/receiver.cpp:123:65: error: use of deleted function ‘dab::ensemble::ens

帖子中提到的项目可以在@

在尝试运行一个旨在接收任意DAB+数据的旧项目时,我在构建该项目时遇到了一个问题

/home/daan/data-over-dab-example/src/receiver.cpp: In function ‘int main(int, char**)’:
/home/daan/data-over-dab-example/src/receiver.cpp:123:65: error: use of deleted function ‘dab::ensemble::ensemble(dab::ensemble&&)’
  123 |   auto ensemble = dab::ensemble{symbols, dab::kTransmissionMode1};
      |                                                                 ^
In file included from /home/daan/data-over-dab-example/src/receiver.cpp:35:
/home/daan/data-over-dab-example/external/dabdecode/include/dab/ensemble/ensemble.h:68:10: note: ‘dab::ensemble::ensemble(dab::ensemble&&)’ is implicitly deleted because the default definition would be ill-formed:
   68 |   struct ensemble
      |          ^~~~~~~~
/home/daan/data-over-dab-example/external/dabdecode/include/dab/ensemble/ensemble.h:68:10: error: use of deleted function ‘std::atomic<bool>::atomic(const std::atomic<bool>&)’
In file included from /usr/include/asio/detail/std_fenced_block.hpp:22,
                 from /usr/include/asio/detail/fenced_block.hpp:24,
                 from /usr/include/asio/detail/executor_op.hpp:19,
                 from /usr/include/asio/impl/system_executor.hpp:18,
                 from /usr/include/asio/system_executor.hpp:127,
                 from /usr/include/asio/associated_executor.hpp:21,
                 from /usr/include/asio/detail/bind_handler.hpp:20,
                 from /usr/include/asio/detail/wrapped_handler.hpp:18,
                 from /usr/include/asio/io_context.hpp:24,
                 from /usr/include/asio/io_service.hpp:18,
                 from /home/daan/data-over-dab-example/include/tun_device.h:45,
                 from /home/daan/data-over-dab-example/src/receiver.cpp:32:
/usr/include/c++/9/atomic:73:5: note: declared here
   73 |     atomic(const atomic&) = delete;
      |     ^~~~~~
make[2]: *** [src/CMakeFiles/receiver.dir/build.make:63: src/CMakeFiles/receiver.dir/receiver.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:598: src/CMakeFiles/receiver.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
在该文件中,可以在第73行附近找到以下代码:

  public:
    atomic() noexcept = default;
    ~atomic() noexcept = default;
    atomic(const atomic&) = delete;
    atomic& operator=(const atomic&) = delete;
    atomic& operator=(const atomic&) volatile = delete ;
当我删除最后三个
=delete
时,项目将运行,其功能不会受到损害。尽管如此,我们现在使用的修复方法似乎并不正确,我们希望解决它,但我们不知道如何解决

到目前为止,我们认为这可能是因为使用了较新的库,因为该项目已有3年的历史,但是使用不同版本重新安装了几次没有帮助

此代码(错误来源)可在ensemble中找到。h:

struct ensemble
    {  ensemble(symbol_queue_t & symbols, internal::types::transmission_mode const & mode); }
合奏.h可在以下网址找到:

我们正在Ubuntu的最新版本上运行这个项目

我们已经联系过该项目的开发人员,但是他们在过去的两年里没有看过,所以他们也没有任何线索

如果有什么不清楚或您需要更多的样品,我们很乐意提供

error: use of deleted function ‘dab::ensemble::ensemble(dab::ensemble&&)’
因此,移动构造函数被删除。如果基类或成员对象已删除移动构造函数,则可以隐式删除该构造函数

您要么需要使其可移动,要么只需编写

dab::集成{符号,dab::kTransmissionMode1};
即,在原地初始化对象,而不是从临时位置移动。请注意,在C++17及更高版本中,您的原始代码应该可以工作,而不需要从临时代码移动(请参阅上的注释)

因此,移动构造函数被删除。如果基类或成员对象已删除移动构造函数,则可以隐式删除该构造函数

您要么需要使其可移动,要么只需编写

dab::集成{符号,dab::kTransmissionMode1};

即,在原地初始化对象,而不是从临时位置移动。注意,你的原始代码应该不需要从C++ 17中的临时文件中移动(稍后查看注释)。<…>继续……我们继续使用项目来更改C++的源文件……-不要这样做。曾经。@Fredrarson从哪段代码中我可以看到这个?在整个employ.h和employ.cpp文件中,没有引用std::atomicI,错误消息将被忽略。我还没有看到密码。请提供a。您链接的回购协议中没有集合。h。如果您想要任何更具体的帮助,您应该显示集成类的构造函数,以及至少它的基类和数据成员列表。并告诉我们你使用的编译器、版本和语言版本。“…继续我们的项目,我们改变了C++的源文件……-不要这么做。”曾经。@Fredrarson从哪段代码中我可以看到这个?在整个employ.h和employ.cpp文件中,没有引用std::atomicI,错误消息将被忽略。我还没有看到密码。请提供a。您链接的回购协议中没有集合。h。如果您想要任何更具体的帮助,您应该显示集成类的构造函数,以及至少它的基类和数据成员列表。并告诉我们您使用的编译器、版本和语言版本。
error: use of deleted function ‘dab::ensemble::ensemble(dab::ensemble&&)’