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