我想使用类的常量静态变量来声明数组成员变量的长度。如果我这样做:
foo(&p);
A.h中出现错误:" ' LENGTH'声明internalArray时,未在此范围内声明"。
我发现它很奇怪,因为一个类成员变量,即LENGTH,怎么超出了类中的范围?我找到的唯一解决方法是将初始化从A.cpp移动到A.h:
// A.h
#include <array>
using namespace std;
class A {
array<int,LENGTH> internalArray;
public:
const static int LENGTH;
};
// A.cpp
#include "A.h"
constexpr int A::LENGTH{10};
但据我所知,首先是两个不同的变量:全局命名空间范围LENGTH和类范围LENGTH。此外,在.h(在A类之外)声明变量将在包含标题的每个翻译单元中创建一个独立的LENGTH对象。
有没有办法用静态类范围的变量指定数组的长度?
答案 0 :(得分:4)
试试这个:
#include <array>
class A {
public:
static const size_t LENGTH = 12;
private:
std::array<int,LENGTH> internalArray;
};
int main(){
A a;
}
您可以在类标题中声明LENGTH
的值,不需要将其作为单独的全局变量或者使其存在于cpp文件中。
使用size_t
类型,因为这是std::array
模板所期望的。
如果公共/私人安排对您不利,请知道您可以在类标题中包含多个公共/私人指标。