在类模板中定义静态数组

ruh*_*ner 1 c++ arrays static templates definition

我在类模板中有一个静态数组.链接器抱怨一个未定义的符号,即使应用了我在网上看到的提示,我也无法弄清楚出了什么问题.

template<unsigned int N1, unsigned int N2>
class Foo 
{
private:
    static const int Size = N1 * N2;

public:
// stuff

private:
    static float mArray[Size];

}
Run Code Online (Sandbox Code Playgroud)

CPP

template <unsigned int N1, unsigned int N2>
float Foo<N1, N2>::mArray[size] = {0};
Run Code Online (Sandbox Code Playgroud)

链接器抱怨没有定义Foo <...> :: mArray.当我将定义移动到标题时,我得到了编译(和链接),但我知道这对于静态来说是不好的做法.这里最好的方法是什么?

干杯

Rei*_*ica 5

与几乎所有其他模板-y一样,类模板的静态数据成员的定义需要在使用它的所有翻译单元中访问 - 换句话说,将其放在头文件中.需要编译器+链接器才能使这项工作没有多重定义错误.