在 class 个模板中定义一个静态数组

define a static array in class templates

我在 class 模板中有一个静态数组。 linker 抱怨一个未定义的符号,即使在应用了我在网上看到的提示之后,我也无法弄清楚哪里出了问题。

Header

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

public:
// stuff

private:
    static float mArray[Size];

}

CPP

template <unsigned int N1, unsigned int N2>
float Foo<N1, N2>::mArray[size] = {0};

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

干杯

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