2010-06-14 129 views
1

与某物的回答这个问题开始:C++多重定义错误

我在想,如果下面的代码 放于头文件如何解决多个定义错误包括多个通过不同的文件的.cc时间和连接在一起:

template <typename T> 
class C { 
    static const int K; 
    static ostream& print(ostream& os, const T& t) { return os << t;} 
}; 

// general case 
template <typename T> 
const int C<T>::K = 1; 

// specialization 
template <> 
const int C<int>::K = 2; 

回答

2

专业化移动到.CC的F一个尔斯。在标题中留下模板版本。

+0

这将如何工作?如果我需要在多个.cc文件中进行特殊化,该怎么办?然后,当我使用相同的定义链接多个.cc文件时,出现错误。 – user231536 2010-06-14 19:13:19

+0

@ user231536:如果你编写一个普通的类,你只需要在一个.cc文件中提供方法定义,链接器就可以从其余的.cc文件中使用它们。完全专业化的相同作品。您只在一个.cc文件中提供专业化,链接器确保其他.cc文件可以使用它。 – Paul 2010-06-14 19:16:23

0

根据不同的平台,您可以通过一个的#ifdef或类似的#pragma围绕着它曾经

0

我能想到的唯一的事情是,你定义所有类型之前K变量任何专业的,所以当编译器将获取到<int>专业化,变量的定义就已经存在..

所以,如果是这样的话,你要移动的专业化为C<int>::K之前C<T>::K