为什么我可以在header文件中实现class的成员函数?
Why I can implement the class's member function in header file?
我知道你应该只在 header 中声明一个函数并且避免定义它,因为如果多个源文件包含这个 header ,链接器会告诉你有重复的符号。
我也知道,建议在header中声明一个class,在源文件中实现成员函数
但这是我的问题:我尝试在header中定义整个class(包括成员函数的所有实现),然后我发现链接器没有错误,当我将此 header 包含在两个源文件中。
这是我的 header.h 文件
class ctr
{
public:
ctr();
ctr(char *s);
int showname(){return 0;}
private:
char *name;
};
在另外两个文件中,我包含了header.h
//file1.cpp
#include header.h
//file2.cpp
#include header.h
然后编译它们g++ file1.cpp file2.cpp
所以谁能告诉我为什么正常的函数定义会给我一个错误,但 class 定义是好的?
class 主体中定义的成员函数隐式 inline
[class.mfct]/p2:
A member function may be defined (8.4) in its class definition, in which case it is an inline member function [..]
inline
说明符允许跨多个翻译单元定义函数。
我知道你应该只在 header 中声明一个函数并且避免定义它,因为如果多个源文件包含这个 header ,链接器会告诉你有重复的符号。
我也知道,建议在header中声明一个class,在源文件中实现成员函数
但这是我的问题:我尝试在header中定义整个class(包括成员函数的所有实现),然后我发现链接器没有错误,当我将此 header 包含在两个源文件中。
这是我的 header.h 文件
class ctr
{
public:
ctr();
ctr(char *s);
int showname(){return 0;}
private:
char *name;
};
在另外两个文件中,我包含了header.h
//file1.cpp
#include header.h
//file2.cpp
#include header.h
然后编译它们g++ file1.cpp file2.cpp
所以谁能告诉我为什么正常的函数定义会给我一个错误,但 class 定义是好的?
class 主体中定义的成员函数隐式 inline
[class.mfct]/p2:
A member function may be defined (8.4) in its class definition, in which case it is an inline member function [..]
inline
说明符允许跨多个翻译单元定义函数。