Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用指向未定义成员函数的指针时的未定义引用_C++ - Fatal编程技术网

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() {} };