我正在处理一个奇怪的问题。我有一个代码,我需要在其中使用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
文件,其中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
文件正确指定包含路径,而不仅仅是为.cpp
?
最终,更仔细地阅读整个错误消息是有帮助的:
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
被错误地包含在DataSet.h
其中是 API 的一部分。因此,在尝试使用库编译可执行文件中的代码时,编译失败,而不是在库本身的编译过程中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句