使用指向未定义成员函数的指针时的未定义引用
Undefined reference when using pointer to undefined member function
为什么这会导致未定义的引用?
struct A { void f(); };
int main()
{
auto f = &A::f;
}
是否必须先定义该函数,然后才能获取指向它的指针?为什么会导致链接器错误?
更新:我刚刚发现在没有优化的情况下进行编译给出了未定义的参考。
您希望获取不存在变量的地址。(函数,就此事而言,是一种常量变量)
你现在拥有的就像一个前瞻声明。你为一个函数声明,但没有实现它(它类似于缺少extern
变量)。
地址本身应该在链接期间给出,但是当链接器搜索它时,它会丢失。
此外,该函数可以在主函数之后甚至在其他文件中实现,但编译器在串行处理中一次处理一个文件。 因此,编译器无法知道该函数未在任何地方实现。
所以没有编译错误,因为有前向声明,并且名称是已知的,但是有链接错误,因为使用了函数但未实现。
它没有实现,因此该函数不存在,链接器找不到它来获取其地址。 而不是:
struct A { void f(); };
用:
struct A { void f() {} };
相关文章:
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 在硬件SIMD矢量指针和相应类型之间进行"interpret_cast"是一种未定义的行为吗
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- C++:私有类指针成员返回未定义的值
- 返回对未定义指针的引用
- 使用无效指针初始化指针声明符的行为是否未定义?
- 根据下面的作者,如果两个指针指向不同的数组,则比较的第一个版本将未定义
- 强制转换为指针引用是否会导致未定义的行为
- C++编译并链接到指向未定义函数的指针
- C++数组上的指针数学中的未定义行为
- 通过在此指针上放置新位置重新初始化对象时未定义的行为
- C 指针未定义的参考
- 将未定义的参数计数作为模板参数的函数指针
- 指针上的const_cast "this"是未定义的行为吗?
- 为什么指针减法是C++中未定义的行为?
- 未定义的引用指针的变量模板在clang中功能,而不是GCC
- 为什么将指针指向std ::设置的提取节点是未定义的行为
- 使用已删除shared_ptr中的原始指针的未定义行为
- C++修改指向结构的指针向量会导致未定义的行为
- 未定义的引用:试图初始化来自不同类的对象的指针数组