数组分为头文件和源文件
Arrays split into header and source files
由于一些奇怪的原因,我总是忘记数组的确切语法。我如何在头部创建一个数组,并在构造函数中初始化它?是否可以在头中初始化它以及定义它?
您可以使用extern
关键字在头文件中声明变量,但是在头文件中定义可能会导致多个定义和链接器错误(除非您使用static
关键字和头文件保护,在这种情况下,您将为每个翻译单元创建单独的数组实例)。
头
extern int array[ARRAY_SIZE];
static int stArray[ARRAY_SIZE] = {initialized static array};
X.CPP
#include the header
int array[ARRAY_SIZE] = {initialize here}
... some code
int i = array[index]; //access the array initialized in X.CPP
int j = stArray[index]; //access the array initialized in X.CPP
//when including the header
Y.CPP
#include the header
// don't initialize
...
in some code do:
int i = array[index]; // you'll access the array initialized in X.CPP.
int j = stArray[index]; //access the array initialized in Y.CPP when
// including the header, not the same as in X.CPP
编辑
Re类成员——它们通常在头文件中定义,但是在创建类实例(对象)时创建,并且应该在构造函数中初始化。除非您将它们标记为static
,然后您必须在某处的CPP文件中定义它们(以与extern
变量类似的方式)。
另外,在注释中提到:全局变量不应该在main
被调用之前被访问(即:一个全局/静态变量不应该基于另一个全局/静态值的值被初始化)。这可能会导致静态初始化失败的问题。
好吧,你总是可以使用指针并动态地做…只需要记得用delete[]来清理。
在头文件中声明一个指针…
int * x = 0;
在cpp中,调用new,做你需要做的事情。
x = new int[15];
//do stuff
delete [] x;
我在这个问题上多读了一点,似乎是不可能的:这实际上击中了c++语言的一个缺点-在c++中没有办法初始化非静态数组成员。
相关文章:
- 为测试目标创建具有不同源文件夹的文件
- 生成一个生成文件,该生成文件使用Automake在一个步骤中编译和链接所有源文件
- 生成文件:动态源文件名和对象目录
- 无法使用 CMake 从其他文件夹添加源文件
- CMake 源文件找不到头文件
- 给定一个源文件,有没有办法要求 gcc 返回仅直接包含的头文件的列表?
- UE4 - Visual Studio在我从编辑器添加新的c ++文件后无法打开任何源文件 - UBT_COMPILED
- cpp 在主源文件中包括.cpp文件导致错误"duplicate symbol"
- 如何将 .ui 完全转换为 C++ 头文件和源文件
- 在生成文件中添加源文件并更新依赖项
- CMake 在源文件附近找不到头文件
- GNU 在看到其他同名文件时重用源文件
- #include "date.h" 创建错误 E1696 无法打开源文件"date.h",也无法打开包含文件:没有这样的文件或目录
- DirectX 11 文件无法打开源文件
- 用libclang解析源文件 - 链接问题包括文件
- 获取对源文件中特定函数的所有调用并生成其他文件(使用 C、C++预处理器或脚本)
- 我有一个预处理的 C/C++ 源文件 (cacti.i).如何从这个 .i 文件生成可执行二进制文件,以便我可以像 ./
- 创建 Matlab MEX 函数时,我是否将 mexFunction 放在 c++ 头文件或源文件中
- Linux 可执行文件中列出的源文件
- 使用GCC的C makefile - 从子文件夹列表中生成源文件列表