定义静态常量变量在C ++中(Defining static const variable in C

2019-10-18 04:57发布

我有这样一个类:

/* ClassA.h */
class ClassA{
public:
  static const size_t SIZE = 10;
  int array[SIZE];
  funcA();
  funcB();
  ...
};

而且,在其他CPP文件中,有这样的代码:

min(ClassA::SIZE, other_variable);

但是,我不能建立这个代码,我也得到类似下面的错误(在Mac OS X,苹果LLVM最新的CC 4.2(铛-425.0.28))

Undefined symbols "ClassA::SIZE" ...

这可能是因为“尺寸”头文件中定义的,并且可以像宏被使用,ClassA.o不包含“大小”,作为符号。 与此同时,以某种方式参照码内“min”是模板中使用时需要符号。 (I可以通过“纳米”检查它命令该ClassA.o不含“SIZE”的符号,但参照码的对象文件中包含“SIZE”符号。)

ClassA.o可以包含象下面这样定义ClassA.cpp字面号“SIZE”符号:

const int ClassA::SIZE = 10; 

但在这种情况下,还有另一种错误象下面,由于在头文件被定义的数组。

error: fields must have a constant size: 'variable length array in structure' extension will never be supported

原始代码在一些旧的编译器(LLVM 4.0)工作。 任何好主意来解决这种情况呢?

Answer 1:

您需要提供一个定义ClassA::SIZE ,但还是给在声明中对常量积分值:

/* ClassA.h */
class ClassA{
public:
  static const size_t SIZE = 10; // value here
  int array[SIZE];
  funcA();
  funcB();
  ...
};


/* ClassA.cpp */
const size_t ClassA::SIZE; // no value here


Answer 2:

/* ClassA.h */
class ClassA{
public:
  static const size_t SIZE = 10;
  int array[SIZE];
  funcA();
  funcB();
  ...
};
const size_t ClassA::SIZE;

这应该工作。



Answer 3:

为什么不使用一个枚举?你可以在一个静态方法定义数组作为一个静态变量(所以一切都是在头文件)

class ClassA {
    public:
    enum {SIZE=10;};
    static int *array() { static int arr[SIZE]; return arr; }
};


文章来源: Defining static const variable in C++
标签: c++ class const