我的问题如下:
template<typename T>
struct A {
T* array[B<T>::N];
};
template<typename T>
struct B {
static const int N = 10;
A<T> a;
}
这不能编译,因为我需要某种前向声明。我看到两个选项
更改A
的类声明+前向声明的顺序,以便在A
中使用B
的指针。我不喜欢它,因为我真的希望在A
A*
而不是B
成员
使N
成为A
的模板参数。现在我想我会选择这个,但我也不喜欢它,因此我想知道......
有没有办法让这段代码编译(如果可能的话,不改变任何类型或引入更多的模板参数)?
有很多类似的问题,但对大多数问题来说,答案就是答案:&#34;你不能向前(静态)班级成员&#34; 以下是其中一些:
forward declare static function c++
答案 0 :(得分:1)
您可以稍微更改一下类以解决问题。
解决方案1:让N
成为A
成员
template<typename T>
struct A {
static const int N = 10;
T* array[N];
};
并根据B<T>::N
定义A<T>::N
。
template<typename T>
struct B {
static const int N = A<T>::N;
A<T> a;
};
解决方案2:将N
另一个模板参数设为A
template<typename T, int N>
struct A {
T* array[N];
};
template<typename T>
struct B {
static const int N = 10;
A<T, N> a;
};