使用指向未定义成员函数的指针时的未定义引用

Undefined reference when using pointer to undefined member function

本文关键字:未定义 指针 引用 函数 成员      更新时间:2023-10-16

为什么这会导致未定义的引用?

struct A { void f(); };
int main()
{
    auto f = &A::f;
}

是否必须先定义该函数,然后才能获取指向它的指针?为什么会导致链接器错误?

更新:我刚刚发现在没有优化的情况下进行编译给出了未定义的参考。

您希望获取不存在变量的地址。(函数,就此事而言,是一种常量变量)

你现在拥有的就像一个前瞻声明。你为一个函数声明,但没有实现它(它类似于缺少extern变量)。

地址本身应该在链接期间给出,但是当链接器搜索它时,它会丢失。

此外,该函数可以在主函数之后甚至在其他文件中实现,但编译器在串行处理中一次处理一个文件。 因此,编译器无法知道该函数未在任何地方实现。

所以没有编译错误,因为有

前向声明,并且名称是已知的,但是有链接错误,因为使用了函数但未实现。

它没有实现,因此该函数不存在,链接器找不到它来获取其地址。 而不是:

struct A { void f(); };

用:

struct A { void f() {} };