gpt4 book ai didi

c++ - 数组拆分为头文件和源文件

转载 作者:行者123 更新时间:2023-11-28 03:45:44 26 4
gpt4 key购买 nike

出于某些奇怪的原因,我总是忘记数组的确切语法。如何在 header 中创建一个数组并在构造函数中对其进行初始化?是否可以在 header 中初始化并定义它?

最佳答案

您可以使用 extern 关键字在 header 中声明变量,但在 header 中定义可能会导致多个定义和链接器错误(除非您使用 static 关键字和header-guards,在这种情况下,您将为每个翻译单元创建单独的数组实例)。

例如:

标题

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 之前访问(即:一个全局/静态变量不应基于另一个全局变量的值进行初始化/静态值)。这可能会导致称为 Static Initialization Fiasco 的问题.

关于c++ - 数组拆分为头文件和源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7772161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com