如何正确定义.h文件中的const int?

pau*_*ons 2 c++ header

在一个项目中,我需要定义一个const int,我在头文件中定义它:

 extern const int a;
Run Code Online (Sandbox Code Playgroud)

我多次包含该标题.然后只在一个源文件中,我把:

const int a=10;
Run Code Online (Sandbox Code Playgroud)

但是当我需要在数组绑定中使用a时; 即:

int anarray[a];
Run Code Online (Sandbox Code Playgroud)

我明白了:

"array bound is not an integer constant"
Run Code Online (Sandbox Code Playgroud)

错误.为什么?

CB *_*ley 12

数组绑定必须是一个整数常量表达式.要成为一个整数常量表达式,只有在使用常量表达式初始化表达式时,表达式才必须仅涉及(在其他一些事物中)文字,enum值和const变量或static数据成员.

const如果整数类型的变量没有初始化器,则它们不是整型常量表达式.

它是一种语言规则,允许实现在编译时知道某些常量值,而不必了解其他转换单元(可能不会同时编译,也可能独立更改).

const命名空间范围内的变量默认具有内部链接(即没有显式extern),因此如果您执行此类操作,则不会出现任何多重定义问题.

// header.h
const int a = 10;
Run Code Online (Sandbox Code Playgroud)

.

// source.cpp
int anarray[a];
Run Code Online (Sandbox Code Playgroud)


Pau*_*l R 5

数组维度需要在编译时知道.对于诸如此类的常量,您可能需要考虑使用枚举.这样它的值在标题中可见,并且在调试时仍然会得到符号名称(与使用#define不同).

// foo.h

enum {
    a = 10; // array dimension
};
Run Code Online (Sandbox Code Playgroud)

// foo.c

#include "foo.h"

int anarray[a];
Run Code Online (Sandbox Code Playgroud)