【问题标题】:Boost get_untyped_deleter error提升 get_untyped_deleter 错误
【发布时间】:2014-03-18 19:44:51
【问题描述】:

每次我在 ubuntu 中使用 g++ 编译我的代码时,都会出现以下错误: /usr/include/boost/smart_ptr/detail/shared_count.hpp:453:26: 错误:‘class boost::detail::sp_counted_base’没有名为‘get_untyped_deleter’的成员

这是我的代码:

#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

void print(const boost::system::error_code& /*e*/)
{
  std::cout << "Hello, world!\n";
}

int main()
{
  boost::asio::io_service io;

  boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
  t.async_wait(&print);

  io.run();

  return 0;
}

我的运行方式是这样的:

g++ main.cpp -o main

我正在运行 boost 1.55(迄今为止的最新版本) 怎么回事?

提前致谢

【问题讨论】:

  • 什么是g++版本?你确定不混合不同的 Boost 版本吗?

标签: c++ boost compiler-errors smart-pointers


【解决方案1】:

要详细说明 Igor R 的评论,很可能您最终只在您的机器上安装了部分 boost,并且您要么丢失了文件,要么 gcc 最终从不同的路径中获取了零碎,根据它的标准包括。

如果您运行g++ -H main.cpp -o main,您应该能够跟踪该特定包含发生的情况。例如:

$ g++ -H -c main.cpp -o main 2>&1 | grep sp_counted
............. /usr/include/boost/smart_ptr/detail/sp_counted_base.hpp
.............. /usr/include/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp
............. /usr/include/boost/smart_ptr/detail/sp_counted_impl.hpp

如您所见,在我的盒子上,它从标准包含路径中获取所有内容,这是我所期望的,也是默认的提升(对我来说不是 1.55)。

如果我想将我的 g++ 指向特定的 boost 版本,我可以使用 -I 覆盖默认首选项,

$ g++ -H -c main.cpp -o main -I/opt/dev/boost_1_55_0 2>&1 | grep sp_counted
............ /opt/dev/boost_1_55_0/boost/smart_ptr/detail/sp_counted_base.hpp
............. /opt/dev/boost_1_55_0/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp
............ /opt/dev/boost_1_55_0/boost/smart_ptr/detail/sp_counted_impl.hpp

【讨论】:

    【解决方案2】:

    我的主要问题似乎是已经安装的 Boost 1.49(我的计算机中安装了另一个程序)和 Boost 1.55 之间的冲突。 我卸载了 Boost 1.55 并离开了 1.49,现在一切正常

    【讨论】:

      猜你喜欢
      • 2015-04-07
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 2012-05-16
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多