模板中的静态变量未定义

时间:2014-06-20 08:50:29

标签: c++

为什么这段代码没有工作并给出“未定义的最大值”?

#include <iostream>
using namespace std;

template<typename T>
struct Foo {
  static T const max;
};

template<> struct Foo<int> { // Specialization
    static int max; 
};

template<typename T> T const Foo<T>::max = 22;

template struct Foo<int>;

int main() {

    struct Foo<int> ma;
    cout << ma.max;

    return 0;
}

我定义了静态变量并且我实例化了模板(我相信显式实例化在这里没用)。

怎么了?

1 个答案:

答案 0 :(得分:1)

template<typename T> T const Foo<T>::max = 22;是一般情况的定义,不是专业化的定义。

您还必须为int专业化定义int Foo<int>::max = 22;