当其他类存在时,为什么其对象文件中缺少一个类方法?

问题描述 投票:0回答:1

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

在: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中的后续代码的第二个指示符。

该方法的原始名称是search,并且更改了名称以避免与c ++ regex发生冲突。

该程序正确执行,因为gg.cpp具有所需的代码,但此方法应出现在gg_state.o中。

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

为什么跟随方法不会出现在nm的输出中?

c++ g++ c++17
1个回答
2
投票
    void
    follow (void* a_pointer, auto a_bytecount, const char* a_label="");

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

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

© www.soinside.com 2019 - 2024. All rights reserved.