C ++:如何用静态常量变量指定数组长度?

时间:2017-06-13 20:13:53

标签: c++ c++11 constexpr stdarray

我想使用的常量静态变量来声明数组成员变量的长度。如果我这样做:

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对象。

有没有办法用静态类范围的变量指定数组的长度?

1 个答案:

答案 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模板所期望的。

如果公共/私人安排对您不利,请知道您可以在类标题中包含多个公共/私人指标。