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

  • 本文关键字:函数 C++ 删除 ASIO c++
  • 更新时间 :
  • 英文 :


帖子中提到的项目可以找到@https://github.com/Opendigitalradio/data-over-dab-example

在尝试运行一个旨在接收任意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

几个星期以来,我一直在尝试修复这个错误,为了继续这个项目,我们不得不更改C++的源文件。正如你所看到的,错误提到

/usr/include/c++/9/atomic:73:5

在这个文件中,可以在第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年的历史了,但用不同版本重新安装几次也无济于事。

这个错误来源的代码可以在集合中找到。h:

struct ensemble
{  ensemble(symbol_queue_t & symbols, internal::types::transmission_mode const & mode); }

合奏.h可以在以下位置找到:https://github.com/Opendigitalradio/libdabdecode/blob/master/include/dab/ensemble/ensemble.h

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

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

如果有任何不清楚的地方,或者您需要更多的样品,我们很乐意提供。

error: use of deleted function ‘dab::ensemble::ensemble(dab::ensemble&&)’

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

你要么需要让它移动,要么只写

dab::ensemble ensemble{symbols, dab::kTransmissionMode1};

即,将对象初始化到位,而不是从临时对象移动。请注意,在C++17及更高版本中,您的原始代码应该可以在不需要从临时代码移动的情况下工作(请参阅复制列表初始化的说明(。

最新更新