为什么其他人出现时,其对象文件中缺少一个类方法?

时间:2017-12-18 10:10:48

标签: c++ g++ c++17

这可能是一个愚蠢的错误,但我无法修复它。

在: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的输出中?

1 个答案:

答案 0 :(得分:2)

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

auto参数表示这是一个缩写的函数模板。对概念TS之外的此类事物的支持是GCC扩展。

由于这是一个功能模板,因此通常可以使用和不能放置模板的规则适用。