我知道你应该只在头文件中声明一个函数并避免定义它,因为如果有多个源文件包含这个头文件,链接器会告诉你有重复的符号。
我也知道建议在头文件中声明一个类并在源文件中实现成员函数
但这是我的问题:我尝试在头文件中定义整个类(包括成员函数的所有实现),然后我发现当我在两个源文件中包含此头文件时链接器没有错误。
这是我的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
所以任何人都可以告诉我为什么正常的函数定义会给我一个错误,但类定义是否合适?
答案 0 :(得分:4)
在类体中定义的成员函数是隐式inline
[class.mfct] / p2:
成员函数可以在其类定义中定义(8.4),在这种情况下,它是内联成员函数[...]
inline
说明符允许跨多个翻译单元定义函数。