我不能在自己的标题中包含boost头文件

时间:2015-03-16 13:12:11

标签: c++ boost header include

util.h

#include <boost/property_tree/ptree.hpp>

namespace core {
    class Config {
        boost::property_tree::ptree pt;
....

我收到错误:

  

错误2错误C1083:无法打开包含文件:   'boost / property_tree / ptree.hpp':没有这样的文件或   目录d:\ path \ kserver \ lib \ util.h 1 1 kserver

编制选项的完整列表如下:

/GS /TP /W3 /Zc:wchar_t /I"D:\Development\Tools\boost_1_57_0" /Zi /Gm- /Od /Ob0 /Fd"core.dir\Debug\vc120.pdb" /fp:precise /D "WIN32" /D "_WINDOWS" /D "_DEBUG" /D "BOOST_ALL_NO_LIB" /D "CMAKE_INTDIR=\"Debug\"" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /RTC1 /GR /Gd /MDd /Fa"Debug/" /EHsc /nologo /Fo"core.dir\Debug\" /Fp"core.dir\Debug\core.pch" 

如果我在cpp文件中包含ptree.hpp,它可以正常工作。

如何在头文件中定义变量?请注意,该问题并非针对ptree

更新

我弄清楚它是什么。我的解决方案是几个项目,其中一个是主项目使用的库。 lib头包含boost头文件。在我的主项目中包含头文件时,无法找到hpp ...这意味着要构建主项目,我必须做以下两件事之一:

  1. 也将提升标题包含在主项目中
  2. 删除标题包含但不将boost变量暴露给主项目
  3. 还有其他选项,所以我仍然可以将头文件保留在头文件中吗?

3 个答案:

答案 0 :(得分:1)

隐藏您图书馆的实施细节。使用也称为Opaque pointer的PIMPL惯用法。库的公开头部应仅包含公共接口和私有实现指针。

答案 1 :(得分:0)

包含路径可能是

  • 标题和源文件不一样

  • 相对的。如果标题位于与源不同的路径中,则相对路径可以有效地指向错误的位置

答案 2 :(得分:0)

你发布的错误似乎你的机器上没有安装boost的开发库,如果已经安装,那么你的编译器没有正确配置从它的安装目录中读取它。

相关问题