//头文件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,编译没问题,因为类模板只有当需要实例化的时候才会被编译链接。
如理解有错误请指正。