【问题标题】:define a static array in class templates [duplicate]在类模板中定义一个静态数组[重复]
【发布时间】:2016-01-28 05:03:31
【问题描述】:

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

标题

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 没有被定义。当我将定义移动到标题时,我得到了编译(和链接),但我知道这对于静态来说是不好的做法。这里最好的方法是什么?

干杯

【问题讨论】:

  • @πάνταῥεῖ 我不太确定是否重复 - 那里的答案实际上都没有提到静态数据成员,而且这条规则也适用于它们并不是很明显。特别是像往常一样,将静态数据成员定义放在头文件中会导致链接器错误。
  • @Angew 好吧,模板类的static 类成员在欺骗中提到的规则和解决方案方面并没有什么特别之处。

标签: c++ arrays templates static definition


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多