1

从 sth 对这个问题的回答开始:

我想知道如果将以下代码放入由不同 .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;
4

3 回答 3

2

将专业化移动到 .cc 文件之一。将模板版本留在标题中。

于 2010-06-14T17:51:55.520 回答
0

根据平台的不同,您可以用 #ifdef 或 #pragma once 之类的东西将其包围

于 2010-06-14T17:52:32.783 回答
0

我唯一能想到的是,您在任何专业化之前为所有K类型定义变量,因此当编译器进行专业化时,变量定义已经存在..<int>

因此,如果是这种情况,您需要将专业化C<int>::K移至之前C<T>::K

于 2010-06-14T17:52:52.133 回答