C++ 模板中的静态变量未定义

C++ 模板中的静态变量未定义,c++,C++,为什么这段代码不起作用并给出一个“未定义的最大值” #包括 使用名称空间std; 模板 结构Foo{ 静态T常数最大值; }; 模板结构Foo{//专门化 静态int max; }; 模板T常量Foo::max=22; 模板结构Foo; int main(){ 结构福马; cout模板T const Foo::max=22;是一般情况的定义,而不是专门化 您还必须为int专门化定义int Foo::max=22;。为什么不能使用一般情况的定义?@user129506因为类模板的显式专门化是一个与

为什么这段代码不起作用并给出一个“未定义的最大值”

#包括
使用名称空间std;
模板
结构Foo{
静态T常数最大值;
};
模板结构Foo{//专门化
静态int max;
};
模板T常量Foo::max=22;
模板结构Foo;
int main(){
结构福马;
cout
模板T const Foo::max=22;
是一般情况的定义,而不是专门化


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

为什么不能使用一般情况的定义?@user129506因为类模板的显式专门化是一个与主模板完全无关的单独类,例如,它可以有完全不同的成员。请查看此
#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;
}