c ++包含未传输的文件

时间:2012-11-16 17:21:16

标签: c++ templates

我有三个文件:

  • domain.h定义了一些简单的结构。其中一个字段是boost :: optional
  • convert.h定义了将普通结构转换为其他类型的模板特化。
  • lib.cpp,它使用domain.h和converts.h

所以,包括:

//domain.h
#include <boost/optional>
//convert.h 
#include "domain.h"
#include <boost/optional>
//lib.cpp  --- version 1 does not work
#include "domain.h"
#include "convert.h"

编译器(VS2010)给出了无法提供信息的错误消息。我尝试添加boost可选包括:

//lib.cpp  --- version 2 works
#include <boost/optional>
#include "domain.h"
#include "convert.h"

为什么boost / optional header include没有从domain.h和/或convert.h转移到lib.cpp?

编辑:

编译器抱怨它可以找到boost :: optional的模板特化。

我发现了一个问题。还有另一个文件定义了boost :: optional,convert-boost-optional.h

的转换特化

如果我将convert.h更改为

#include "domain.h"
#include <convert-boost-optional.h>  

然后版本1也有效。令我困惑的是版本2如何编译而不包括convert-boost-optional.h?

编辑: 我弄糊涂了。我实际上在版本2的lib.cpp中包含<convert-boost-optional.h>。现在一切都有意义。遗憾!

1 个答案:

答案 0 :(得分:0)

我认为听众没有标题保护,所以你可以把它们放在你的代码中:

#ifndef _BOOST_OPTIONAL_H_
#define _BOOST_OPTIONAL_H_
#include <boost/optional>
#endif

如果您将其放置在包含它们的偶然场所中,则您应该不再体验它。


但是,你可能想知道:你真的需要包含在头文件中吗?

即使头文件中的头文件需要某些内容,也可能不需要包含头文件。了解forward declarations以及when you can't use them