我正在尝试在名为ARRAY
的类的构造函数中初始化一个名为CLASS_A
的数组,并且该数组应该可以由嵌套类CLASS_B
访问。我想把数组作为一个模板,但是当事情开始变得有点模糊,如何去理解语法。
我几乎可以肯定,声明ARRAY静态是解决方案的一部分,并且可能使类型const int
成为A
之类的模板,因此模板看起来像template <class A, const int D>
和声明A ARRAY[SIZE];
。无论如何,我最初得到这个错误编译下面的代码然后我做了一些更改,并得到了一个不同的错误。
这是
的链接器错误nested_class_incomplete_type.cpp|16|undefined reference to `CLASS_A<3>::ARRAY'|
nested_class_incomplete_type.cpp|28|undefined reference to `CLASS_A<3>::ARRAY'|
编辑重复的代码。
答案 0 :(得分:2)
您只在ARRAY
中声明了CLASS_A
,您需要对其进行定义:
template <const int D>
int CLASS_A<D>::ARRAY[SIZE] = {};
顺便说一句,你的SIZE字段是多余的,你不需要它,例如:
template <size_t N>
class CLASS_A
{
public:
static int ARRAY[N];
//.....
};
template <size_t N>
int CLASS_A<N>::ARRAY[N] = {};