首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >g++对独立站函数的未定义引用

g++对独立站函数的未定义引用
EN

Stack Overflow用户
提问于 2016-12-07 21:15:50
回答 1查看 242关注 0票数 0

这个问题肯定已回答了无数次,但我却找不到合适的解决办法。

我在sensor.cpp中定义了一个自由函数

代码语言:javascript
复制
std::string printTargetGasName(enalu::CombThreshold::TargetGas){}

然后,我声明了函数的原型。

sensor.hpp

代码语言:javascript
复制
std::string printTargetGasName(enalu::CombThreshold::TargetGas);

然后,我将sensor.hpp包含在core_enose.hpp中,并尝试在core_enose.cpp中使用函数(enalu只是一个名称空间)。

我得到undefined reference链接错误

代码语言:javascript
复制
core_enose.cpp:284: undefined reference to `enalu::printTargetGasName(enalu::CombThreshold::TargetGas)'

make文件中的链接指令似乎是正确的,即sensor.opp位于core_enose.opp之后:

代码语言:javascript
复制
g++ -g -Wall -Wextra -pedantic -std=c++11 [...] obj_dbg/core_enose.opp [...] obj_dbg/sensor.opp [...]

我还检查了sensor.opp文件中是否正确地存在符号:

代码语言:javascript
复制
$> nm obj_dbg/sensor.opp  | grep printTarget
$> 000000000000cc9c T _Z18printTargetGasNameN5enalu13CombThreshold9TargetGasE

我也尝试过非常晚的措施,比如extern,或者将sensor.hpp直接包含在core_enose.cpp文件中。没有任何帮助,在这一点上,我感到沮丧的是,简单的答案,逃避我。

请注意,我没有提供代码,因为传感器。?pp文件相当大,包含一些类,我也一直在我的程序中使用。我在上面描述的是我将这个免费函数添加到一个正常工作的应用程序中所遵循的具体步骤。

你能帮我一下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-07 21:44:21

因为您的链接错误是关于enalu::printTargetGasName的,所以我怀疑您在enalu命名空间中在标头中声明了函数,但是对应的C++没有命名空间。这可能会修复sensor.cpp文件中的问题。

代码语言:javascript
复制
namespace enalu
{
    std::string printTargetGasName(enalu::CombThreshold::TargetGas){}
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41027513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档