这个问题肯定已回答了无数次,但我却找不到合适的解决办法。
我在sensor.cpp中定义了一个自由函数
std::string printTargetGasName(enalu::CombThreshold::TargetGas){}然后,我声明了函数的原型。
在sensor.hpp中
std::string printTargetGasName(enalu::CombThreshold::TargetGas);然后,我将sensor.hpp包含在core_enose.hpp中,并尝试在core_enose.cpp中使用函数(enalu只是一个名称空间)。
我得到undefined reference链接错误
core_enose.cpp:284: undefined reference to `enalu::printTargetGasName(enalu::CombThreshold::TargetGas)'make文件中的链接指令似乎是正确的,即sensor.opp位于core_enose.opp之后:
g++ -g -Wall -Wextra -pedantic -std=c++11 [...] obj_dbg/core_enose.opp [...] obj_dbg/sensor.opp [...]我还检查了sensor.opp文件中是否正确地存在符号:
$> nm obj_dbg/sensor.opp | grep printTarget
$> 000000000000cc9c T _Z18printTargetGasNameN5enalu13CombThreshold9TargetGasE我也尝试过非常晚的措施,比如extern,或者将sensor.hpp直接包含在core_enose.cpp文件中。没有任何帮助,在这一点上,我感到沮丧的是,简单的答案,逃避我。
请注意,我没有提供代码,因为传感器。?pp文件相当大,包含一些类,我也一直在我的程序中使用。我在上面描述的是我将这个免费函数添加到一个正常工作的应用程序中所遵循的具体步骤。
你能帮我一下吗?
发布于 2016-12-07 21:44:21
因为您的链接错误是关于enalu::printTargetGasName的,所以我怀疑您在enalu命名空间中在标头中声明了函数,但是对应的C++没有命名空间。这可能会修复sensor.cpp文件中的问题。
namespace enalu
{
std::string printTargetGasName(enalu::CombThreshold::TargetGas){}
};https://stackoverflow.com/questions/41027513
复制相似问题