c++ - c++ 用于数组大小的外部常量 int
问题描述
我的代码中有以下三个文件(删除了大部分代码。这只是为了隔离问题)。
全球.h:
//global.h
#ifndef GLOBAL_H
#define GLOBAL_H
extern const int ARRAYSIZEX;
extern const int ARRAYSIZEY;
extern const int ARRAYSIZEZ;
#endif //GLOBAL_H
全球.cpp:
//global.cpp
#include "global.h"
const int ARRAYSIZEX = 5;
const int ARRAYSIZEY = 2;
const int ARRAYSIZEZ = 4;
主要的:
//main
#include "global.h"
using namespace std;
someType mySomeTypeArray[ARRAYSIZEX][ARRAYSIZEY][ARRAYSIZEZ];
int main(int argc, char **argv)
{
//...
}
编译在 mySomeTypeArray 的声明中给了我三个错误。
错误:数组绑定在 ']' 标记之前不是整数常量
我想将此应用程序的全局变量和数组大小定义保留在 global.h/cpp 中,仅用于组织,以便我的所有配置参数都在一个地方。实现我想要做的事情的正确方法是什么?
谢谢
解决方案
这里的问题是extern int x
“x
在另一个文件中定义,但不要担心细节,你只需要知道它是一个int
”。这通常已经足够好了,除非编译器需要立即知道x
是什么。
由于这是在整个其他文件中定义的,因此它不能。该文件必须在它知道之前进行编译,并且由于 C++ 的工作方式,该编译的结果不会影响该文件的编译。
const int
如果要共享这些值,则需要在标头中将其声明为 a 。extern int
不会剪的。
尽管这是一个微不足道的例子,但根本没有理由继续这样做extern
。只需将头文件中的值定义为常规const int
。
推荐阅读
- c - 使用C中的函数将大写字符串转换为小写的程序中的问题
- mysql - MySQL过程结果中的重复行
- sql-server - 还原数据库失败 - ElasticPool 中的 Azure SQL 数据库
- botframework - 为什么使用 DirectLine v3 客户端(Microsoft Bot 连接器)时连接会关闭
- java - 如何在 REST API 中使用版权和商标符号?
- c++ - 什么导致双向链表代码中的分段错误
- ios - 从 Firebase 填充的 CLLocationCoordinate2D 数组不会保留其条目。斯威夫特 4
- javascript - 删除不必要的重复
- c# - 使用 C# 定义 SelectionChanged 事件
- java - 如何在 adf 中的 iterator.excuteQuery() 之后再次选择 currentRow?