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

C++ 为什么当其他类方法存在时,一个类方法在其对象文件中不存在?,c++,g++,c++17,C++,G++,C++17,这可能是一个愚蠢的错误,但我一直没能纠正它 在:files:gg_state.h/gg_state.cpp中,gg_state.o中没有“follow”方法 $ nm gg_state.o|grep follow 而上面的“加载”方法 $ nm gg_state.o|grep load 他在场。通过目视检查,以下方法应出现在gg_状态 follow的代码暂时在gg.cpp中复制并编译,但它属于gg_state.cpp。实现该方法的代码位于两个文件的末尾,并且是相同的。编译不会因重复定义而失败

这可能是一个愚蠢的错误,但我一直没能纠正它

在:files:gg_state.h/gg_state.cpp中,gg_state.o中没有“follow”方法

$ nm gg_state.o|grep follow
而上面的“加载”方法

$ nm gg_state.o|grep load
他在场。通过目视检查,以下方法应出现在gg_状态

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


方法的原始名称是搜索,并且名称被更改为跟随以避免与C++正则表达式可能发生冲突。 程序执行正确,因为gg.cpp有它需要的代码,但是这个方法应该出现在gg_state.o中

这个应用程序在UbuntuLinux16.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扩展

因为这是一个函数模板,所以关于模板可以放在哪里和不能放在哪里的常规规则适用

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


由于这是一个函数模板,关于模板可以放在哪里和不能放在哪里的常规规则适用。

直接在这里发布代码。外部链接被劝阻了。“可能与C++正则表达式冲突”,这毫无意义。什么样的冲突?直接在这里发布代码。外部链接被劝阻了。“可能与C++正则表达式冲突”,这毫无意义。什么样的冲突?