编译 boost c++ 代码错误

Posted

技术标签:

【中文标题】编译 boost c++ 代码错误【英文标题】:Compilation boost c++ code errors 【发布时间】:2012-12-28 15:47:36 【问题描述】:

这是代码(来自http://www.boost.org/doc/libs/1_52_0/doc/html/container/move_emplace.html)

#include <boost/container/list.hpp>
#include <cassert>
class non_copy_movable

   non_copy_movable(const non_copy_movable &);
   non_copy_movable& operator=(const non_copy_movable &);

   public:
   non_copy_movable(int = 0) 
;
int main ()

   using namespace boost::container;
   list<non_copy_movable> l;
   non_copy_movable ncm;
   l.emplace(l.begin(), 0);
   assert(l.size() == 1);
   l.emplace(l.begin());
   assert(l.size() == 2);
   return 0;

我在编译时遇到问题。我试过了:

g++ 2.cpp -o 2 -I /usr/include/boost

还有其他组合,但这是错误的。

错误:

2.cpp:1:36: error: boost/container/list.hpp: No such file or directory
2.cpp: In function ‘int main()’:
2.cpp:13: error: ‘boost’ has not been declared
2.cpp:13: error: ‘container’ is not a namespace-name
2.cpp:13: error: expected namespace-name before ‘;’ token
2.cpp:14: error: ‘list’ was not declared in this scope
2.cpp:14: error: expected primary-expression before ‘>’ token
2.cpp:14: error: ‘l’ was not declared in this scope

我在路径中有“增强包含”: /usr/include/boost 在 /usr/lib 中,与 boost 没有任何关系。 我已经使用这个命令在 ubuntu 上安装了 boost:

sudo apt-get install libboost-all-dev

你有一些用于 boost 程序的通用编译吗? 另一个程序也是用 c++ 编写的,使用 boost 我正常编译没有错误:

g++ 1.cpp -o 1
./1

【问题讨论】:

:/usr/include/boost/container$ dpkg -S list.hpp 表示 libboost1.48-dev:/usr/include/boost/container/list.hpp 【参考方案1】:

大多数 boost 都是纯头文件库,所以我并不感到惊讶,您在 /usr/lib 中没有看到很多(如果有的话)boost 库。

也就是说,我认为您的包含路径设置是错误的。您正在尝试包含 boost/container/list.hpp 但您的包含路径中已经包含“boost”。除非库正在安装 /usr/include/boost/boost,否则您需要从包含路径或 #include 行中删除“boost”。我的偏好是将它从包含路径中删除,因为像 #include &lt;boost/container/list.hpp&gt; 这样的语句比 #include &lt;container/list.hpp&gt; 提供更多信息。

【讨论】:

你的代码为我编译没有错误;同时使用 clang 和 gcc 4.2。 不幸的是我仍然有同样的错误。我试图从标题或行编译中删除 boost。 #include 或 g++ 2.cpp -o 2 -I /usr/include。我也尝试过其他组合。 您是否验证了 boost 包含是否实际上在 /usr/include 中? 我已经在命令行中检查了 cd /usr/include/boost 有一些文件主要是 *.hpp。没有“容器”目录,但例如存在“算法”导向器(例如 minmax.hpp)。 那是你的问题。尝试重新安装库还是什么? /usr/local/include 中有什么东西吗?

以上是关于编译 boost c++ 代码错误的主要内容,如果未能解决你的问题,请参考以下文章

为 Sony NMOS 实现编译 C++ boost 库

编译时与 Boost.python 链接错误

尝试使用 makefile 编译 C++ 程序时出现“致命错误:boost/regex.hpp:没有这样的文件或目录”

使用简单 Ls.cpp 的 C++ Boost 编译错误 - 未定义对 boost::filesystem::path::filename 的引用

使用 boost 字符串库在 Visual Studio 中获取字符串编译错误

使用带有 Clang 的 Boost 编译 c++ 项目时出现问题