为什么有一个类方法在其他目标文件中不存在?

这可能是一个愚蠢的错误,但我一直无法解决它。为什么有一个类方法在其他目标文件中不存在?

在:https://github.com/jlettvin/Greased-Grep文件:gg_state.h/gg_state.cpp的 “跟随” 方法是从gg_state.o

$ nm gg_state.o|grep follow 

而高于它

$ nm gg_state.o|grep load 

“负载” 的方法是不存在当下。通过目视检查,以下方法应该出现在gg_state.o中。

暂时的代码跟在gg.cpp中并且在那里编译,但它属于gg_state.cpp。实现该方法的代码位于两个文件的末尾,并且是相同的。编译不会因重复定义而失败,这是第二个指示符,表示编译器忽略gg_state.cpp中的后续代码。

该方法的原始名称是搜索,并更改名称以避免可能与C++正则表达式冲突。

程序执行正常,因为gg.cpp有它需要的代码,但是这个方法应该出现在gg_state.o中。

这个应用程序在ubuntu linux 16.04上编译使用g ++ 7.1.0 --std = C++ 17并且需要实验/文件系统和fmt/printf。测试框架是catch.hpp,但测试还不健壮。

为什么下面的方法不会出现在nm的输出中?

回答:

void 

follow (void* a_pointer, auto a_bytecount, const char* a_label="");

auto参数表示这是一个缩写功能模板。概念TS以外的支持是GCC的一个扩展。

由于这是一个函数模板,因此适用于您可以放置​​模板和不能放置模板的常规规则。

以上是 为什么有一个类方法在其他目标文件中不存在? 的全部内容, 来源链接: utcz.com/qa/262383.html

回到顶部