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

define a static array in class templates

本文关键字:一个 静态 数组 定义      更新时间:2023-10-16

我在类模板中有一个静态数组。链接器抱怨一个未定义的符号,即使在应用了我在网上看到的提示后,我也不知道出了什么问题。

标题

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};

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

干杯

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