关于头文件写类成员函数实现,编译时报“重复定义的符号”
//头文件A class A { void foo(){} };
//头文件B class B { void foo(); }; void B::foo() {}
//头文件C template<class T> class C { void foo(); }; template<class T> void C<T>::foo() { }
如果有两个文件同时包含头文件A,编译没问题,因为这种写法默认了foo为内联函数。
如果有两个文件同时包含头文件B,编译报重复定义的符号,因为这个函数会被链接两次。
如果有两个文件同时包含头文件C,编译没问题,因为类模板只有当需要实例化的时候才会被编译链接。
如理解有错误请指正。