我有三个文件:
所以,包括:
//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>
。现在一切都有意义。遗憾!
答案 0 :(得分:0)
我认为听众没有标题保护,所以你可以把它们放在你的代码中:
#ifndef _BOOST_OPTIONAL_H_
#define _BOOST_OPTIONAL_H_
#include <boost/optional>
#endif
如果您将其放置在包含它们的偶然场所中,则您应该不再体验它。
但是,你可能想知道:你真的需要包含在头文件中吗?
即使头文件中的头文件需要某些内容,也可能不需要包含头文件。了解forward declarations以及when you can't use them。