gpt4 book ai didi

c++ - 编写 C++ 函数以对外部声明的数组进行操作

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:50:53 25 4
gpt4 key购买 nike

我正在尝试编写一组 C++ 函数(a.ha.cpp)来实现对数组的各种操作。实际数组将在其他文件中定义(b.hb.cppc.hc.cpp、等)。

我的目标是任何项目都可以#include "a.h" 并在该项目中定义的数组上运行这些函数。我不想在 a.h 本身中包含任何内容,因为我希望任何 future 的项目都能够使用 a.h 而无需重写它。但是,我不知道如何使用 extern 来执行此操作。

这是我目前拥有的玩具示例。 a 实现函数 f,用于尚未指定的数组。

啊啊

// this is not right, but I'm not sure what to do instead
extern const int ARRAY_LEN;
extern int array[ARRAY_LEN]; // error occurs here

void f();

a.cpp

#include "a.h"

// Do something with every element of "array"
void f() {
for(int i=0; i < ARRAY_LEN; i++) {
array[i];
}
}

现在,项目 b 定义了数组,并希望在其上使用函数 f

b.h

const int ARRAY_LEN = 3;

b.cpp

#include "a.h"
#include "b.h"

int array[ARRAY_LEN] = {3, 4, 5};

// Some functions here will use f() from a.cpp

当我编译它时,我得到:

In file included from b.cpp:1:0:
a.h:2:27: error: array bound is not an integer constant before ‘]’ token

我阅读了这些相关的其他问题:

...但我看不到如何将解决方案应用到我的案例中。问题是人们通常以 #include 结束定义数组的文件,而我想反过来做:在新项目中定义数组,然后 #包括共享函数集以对该数组进行操作。


编辑 1:如果我按照@id256 的建议将 a.h 中的 array 声明替换为以下内容:

extern int array[];

然后我得到一个不同的错误:

multiple definition of `ARRAY_LEN'

编辑 2:我还尝试了以下答案:

Why does "extern const int n;" not work as expected?

基本上,我将“extern const int ARRAY_LEN”添加到 b.h 以“强制外部链接”。所以现在:

b.h

extern const int ARRAY_LEN;
const int ARRAY_LEN = 3;

.. 和所有其他文件与原始文件相同。但我得到了同样的原始错误:

a.h:2:27: error: array bound is not an integer constant before ‘]’ token

最佳答案

将数组声明为extern 时,您无需指定大小(对于多维数组,除了第一维外,您仍然需要指定大小)。只需使用:

extern int array[];

或者,将 b.h 包含在 a.h 中(在声明数组之前),以便在声明数组时可以看到 ARRAY_LEN 的定义。

关于c++ - 编写 C++ 函数以对外部声明的数组进行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29200289/

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