C++ 使用类模板的常量静态变量初始化数组大小时出错 模板 类堆栈{ ... 友元类栈_数组; }; 模板 类堆栈数组{ ... 静态常数最大值; 阵列存储; ... }; 模板 常量大小堆栈数组::最大元素=10;

C++ 使用类模板的常量静态变量初始化数组大小时出错 模板 类堆栈{ ... 友元类栈_数组; }; 模板 类堆栈数组{ ... 静态常数最大值; 阵列存储; ... }; 模板 常量大小堆栈数组::最大元素=10;,c++,arrays,size,static-variables,template-classes,C++,Arrays,Size,Static Variables,Template Classes,对于上述内容,我得到以下编译错误: template<typename T, typename C = vector<T>> class stack{ ... friend class stack_array; }; template<typename T, typename C = vector<T>, typename K = stack<T,C>> class stack_array{ ...

对于上述内容,我得到以下编译错误:

template<typename T, typename C = vector<T>>
class stack{
    ...
    friend class stack_array;
};

template<typename T, typename C = vector<T>, typename K = stack<T,C>>
class stack_array{
     ...
     static const size_t max_elem;
     array<K, max_elem> store;
     ...
};

template<typename T, typename C = vector<T>, typename K = stack<T,C>>
const size_t stack_array<T,C,K>::max_elem = 10;
错误:“stack\u array::max\u elem”的值在常量表达式中不可用
阵列存储;
^
注意:“stack_array::max_elem”未使用常量表达式初始化
静态常数最大值;
我假设发生此错误是因为静态常量变量
max_elem
在模板类定义之后初始化。这种理解正确吗?
有没有一种方法可以在不必更改当前使用的
max_elem
的情况下解决此错误?

我想说的是正确地初始化静态成员

error: the value of ‘stack_array<T, C, K>::max_elem’ is not usable in a constant expression
array<K, max_elem> store;
                ^
note: ‘stack_array<T, C, K>::max_elem’ was not initialized with a constant expression
static const size_t max_elem;
更多

常量静态成员,如果是整型或 枚举类型声明为const(而不是volatile),可以 使用初始值设定项初始化,其中每个表达式都是 常量表达式,位于类定义的右侧:

static const size_t max_elem = 10;
struct X {
     const static int n = 1;
     const static int m{2}; // since C++11
     const static int k; }; 

     const int X::k = 3; // Only this needs to be defined