繁体   English   中英

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

[英]Defining static const variable in C++

我有这样的课:

/* 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中最新的抄送中,Apple LLVM 4.2(clang-425.0.28))

Undefined symbols "ClassA::SIZE" ...

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

通过在ClassA.cpp中定义文字数,ClassA.o可以包含“ 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)中起作用。 有什么好办法解决这种情况吗?

您需要为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
/* ClassA.h */
class ClassA{
public:
  static const size_t SIZE = 10;
  int array[SIZE];
  funcA();
  funcB();
  ...
};
const size_t ClassA::SIZE;

那应该工作。

为什么不使用枚举?您可以在静态方法中将数组定义为静态变量(因此所有内容都在头文件中)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM