将Boost标头包含在.h文件中但不在.cpp文件中时发生错误

时间:2018-12-28 22:12:03

标签: c++ boost cmake header-files

我正在处理一个奇怪的问题。我有一个代码,需要在其中使用Boost typeindex框架来实现多个宏。由于我的宏仅包含在头文件中,因此我希望#include <boost/type_index.hpp> 仅包含在头文件中,如下所示:

#include <stdexcept>
#include <boost/type_index.hpp>

#ifdef L4N_DEBUG
#define ERR_MSG(msg) std::string(boost::typeindex::type_id_with_cvr<decltype(*this)>().pretty_name()) + "::" + __func__ + "(): " + msg + " (" +__FILE__ + ":" + std::to_string(__LINE__) + ")"
#else
#define ERR_MSG(msg) std::string(boost::typeindex::type_id_with_cvr<decltype(*this)>().pretty_name()) + "::" + __func__ + "(): " + msg
#endif // L4N_DEBUG

#define THROW_RUNTIME_ERROR(msg) std::runtime_error(ERR_MSG(msg))
#define THROW_LOGIC_ERROR(msg) std::logic_error(ERR_MSG(msg))
#define THROW_INVALID_ARGUMENT_ERROR(msg) std::invalid_argument(ERR_MSG(msg))
#define THROW_NOT_IMPLEMENTED_ERROR(msg) std::logic_error(ERR_MSG("This function is not implented." + msg))

但是我遇到了错误

/home/martin/MyProject/include/../src/DataSet/../Exception/Exceptions.h:9:10: fatal error: boost/type_index.hpp: No such file or directory

当我将include伪指令从Exceptions.h标头移到其中包含.cpp的{​​{1}}文件时,错误消失了。当然,我要指定包含路径,如下所示:

Exceptions.h

是否可以为add_library( MyLib ${LIB_TYPE} Neuron/Neuron.cpp Neuron/NeuronBinary.cpp Neuron/NeuronConstant.cpp Neuron/NeuronLinear.cpp Neuron/NeuronLogistic.cpp Network/NeuralNetwork.cpp Network/NeuralNetworkSum.cpp NetConnection/ConnectionFunctionGeneral.cpp NetConnection/ConnectionFunctionIdentity.cpp LearningMethods/ParticleSwarm.cpp LearningMethods/GradientDescent.cpp DataSet/DataSet.cpp ErrorFunction/ErrorFunctions.cpp Solvers/DESolver.cpp Exception/Exceptions.cpp CSVReader/CSVReader.cpp CrossValidator/CrossValidator.cpp NormalizationStrategy/NormalizationStrategy.cpp ) target_include_directories( lib4neuro PUBLIC ${ROOT_DIR}/include PRIVATE ${EXPRTK_INCLUDE_DIR} ${SRC_DIR} ${Boost_INCLUDE_DIRS} ) 文件(不仅是.h文件)正确地指定包含路径?

1 个答案:

答案 0 :(得分:0)

最终,仔细阅读整个错误消息很有帮助:

In file included from /home/martin/MyLib/include/../src/DataSet/DataSet.h:17,
                 from /home/martin/MyLib/include/myapi.h:10,
                 from /home/martin/MyLib/src/examples/net_test_1.cpp:12:
/home/martin/4Neuro/include/../src/DataSet/../Exception/Exceptions.h:9:10: fatal error: boost/type_index.hpp: No such file or directory
 #include <boost/type_index.hpp>

我们可以看到,Exceptions.h被错误地包含在API的DataSet.h中。因此,当尝试使用该库在可执行文件中编译代码时,而不是在库本身的编译过程中,编译失败。