在C++中定义静态const变量

Tsu*_*oka 1 c++ const class

我有一个这样的课:

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

并且,在另一个cpp文件中,有如下代码:

min(ClassA::SIZE, other_variable);
Run Code Online (Sandbox Code Playgroud)

但是,我无法构建此代码,我收到如下错误(在Mac OS X中最新的cc,Apple LLVM 4.2(clang-425.0.28))

Undefined symbols "ClassA::SIZE" ...
Run Code Online (Sandbox Code Playgroud)

可能是因为"SIZE"在头文件中定义并且可以像宏一样使用,ClassA.o不包含"SIZE"作为符号.同时,在"min"模板中使用时,引用代码以某种方式需要符号.(我可以通过'nm'命令检查ClassA.o不包含"SIZE"符号,但是引用代码的目标文件包含"SIZE"符号.)

ClassA.o可以通过在ClassA.cpp中定义文字编号来包含"SIZE"符号,如下所示:

const int ClassA::SIZE = 10; 
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,由于在头文件中定义了一个数组,因此存在如下所示的另一个错误.

error: fields must have a constant size: 'variable length array in structure' extension will never be supported
Run Code Online (Sandbox Code Playgroud)

原始代码适用于一些较旧的编译器(LLVM 4.0).有什么好主意可以解决这个问题?

gx_*_*gx_ 5

您需要提供定义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
Run Code Online (Sandbox Code Playgroud)