C++ 使用指向未定义成员函数的指针时的未定义引用
为什么这会导致未定义的引用C++ 使用指向未定义成员函数的指针时的未定义引用,c++,C++,为什么这会导致未定义的引用 struct A { void f(); }; int main() { auto f = &A::f; } 在获得指向该函数的指针之前,是否必须定义该函数?为什么会导致链接器错误 更新:我刚刚发现编译时使用提供了未定义的引用。您希望获取address to not exist变量。(实际上,函数是一种常量变量) 你们现在所拥有的就像是一份远期声明。您可以为函数指定状态,但不能实现它(类似于缺少extern变量) 地址本身应该在链接过程中给出,但是
struct A { void f(); };
int main()
{
auto f = &A::f;
}
在获得指向该函数的指针之前,是否必须定义该函数?为什么会导致链接器错误
更新:我刚刚发现编译时使用提供了未定义的引用。您希望获取address to not exist变量。(实际上,函数是一种常量变量) 你们现在所拥有的就像是一份远期声明。您可以为函数指定状态,但不能实现它(类似于缺少
extern
变量)
地址本身应该在链接过程中给出,但是当链接器搜索地址时,地址就丢失了
此外,该函数可以在主函数之后甚至在其他文件中实现,但编译器在串行处理中一次处理一个文件。因此,编译器无法知道函数没有在任何地方实现
因此,没有编译错误,因为有转发声明,名称是已知的,但有链接错误,因为函数已使用但未实现。它没有实现,因此函数不存在,链接器无法找到它以获取其地址。而不是:
struct A { void f(); };
使用:
你什么时候用?这段代码本身不应该有任何问题。@remyabel当我编译时没有优化,它会给出链接器错误。否则,如果启用优化,编译器可能会一直优化程序,直到
intmain(){return 0;}
。这就是问题似乎消失的原因。不管怎样,这样的代码的目的是什么?为什么要获取未在任何地方定义的函数的地址?@πάνταῥεῖ static
应该做什么?
struct A { void f() {} };