假设我有三个文件 A.cpp
、B.cpp
和 B.h
。 A.cpp
和 B.cpp
都包含 B.h
。我在 B.h
中定义了一个自由函数(无论出于何种原因)。然后我得到一个链接器错误:
ld: 1 duplicate symbol for architecture x86_64
这是有道理的。编译器将A.cpp
和B.cpp
分开编译,所以有两个同名同参数的函数。
但是,如果我在 B.h
中声明一个类并在该类中定义一个成员函数,则它编译得很好。这是为什么?那不应该创建相同的链接器错误吗?
最佳答案
Why is it ok in C++ to define a member function in a header but not a free function?
不能多次定义非内联函数。这是“一个定义规则”的一部分。
可以在多个翻译单元中定义内联函数。事实上,内联函数必须在使用它们的每个翻译单元中定义。
头文件通常包含在多个翻译单元中。因此,在 header 中定义的所有函数都应该是内联函数。
在类定义中定义的成员函数是隐式内联的。作为内联函数,可以在头文件中定义它们,就像在头文件中定义内联非成员函数一样。同样,在头文件中定义非内联成员函数也不行,就像在头文件中定义非内联非成员函数一样。
关于c++ - 为什么在 C++ 中可以在头文件中定义成员函数而不是自由函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67286472/