我有两个翻译单元,代码如下:
//Translation Unit A
struct A {
void f(int a) {};
};
//Translation Unit B
void f(int j);
int main()
{
f(4);
}
在
translation unit A
中,struct A
属于全局作用域,因此具有外部链接,因此成员函数名f
也具有外部链接。在第二个translation unit
中,声明的函数f
也具有外部链接。根据 C++ 草案 ISO N°4901(2021) 的外部链接定义:
当名称具有外部链接时,它所表示的实体可以是 其他翻译单位范围内的名称或来自 同一翻译单元的其他范围。
当我运行代码时,尽管出现链接错误。为什么会出现这种情况?这种联系是如何发生的?
有两个功能
A::foo
在 TU A 中声明,并且在那里也有 inline
定义。::foo
TU B 中仅声明,未定义。foo
中的 main
符号解析为后者,因为链接器无法找到其定义,因此会发出错误。