这可能是一个愚蠢的错误,但我无法修复它。
在:https://github.com/jlettvin/Greased-Grep文件中:gg_state.h / gg_state.cpp gg_state.o中没有“follow”方法
$ 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中。
这个应用程序使用g ++ 7.1.0 --std = c ++ 17在ubuntu linux 16.04上编译,需要实验/文件系统和fmt / printf。测试框架是catch.hpp,但测试还不健全。
为什么跟随方法不会出现在nm的输出中?
答案 0 :(得分:2)
void
follow (void* a_pointer, auto a_bytecount, const char* a_label="");
auto
参数表示这是一个缩写的函数模板。对概念TS之外的此类事物的支持是GCC扩展。
由于这是一个功能模板,因此通常可以使用和不能放置模板的规则适用。