关于头文件写类成员函数实现,编译时报“重复定义的符号”

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

如理解有错误请指正。

原文地址:https://www.cnblogs.com/mrblue/p/3105523.html