Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编写C++;函数对外部声明的数组进行操作 我试图编写一组C++函数( A.H. >代码> .CPP < /代码>),实现数组上的各种操作。实际数组将在其他文件中定义(b.h,b.cpp,c.h,c.cpp等)_C++_Arrays_Constants_Extern_Linkage - Fatal编程技术网

编写C++;函数对外部声明的数组进行操作 我试图编写一组C++函数( A.H. >代码> .CPP < /代码>),实现数组上的各种操作。实际数组将在其他文件中定义(b.h,b.cpp,c.h,c.cpp等)

编写C++;函数对外部声明的数组进行操作 我试图编写一组C++函数( A.H. >代码> .CPP < /代码>),实现数组上的各种操作。实际数组将在其他文件中定义(b.h,b.cpp,c.h,c.cpp等),c++,arrays,constants,extern,linkage,C++,Arrays,Constants,Extern,Linkage,我的目标是,任何项目都可以#包括“a.h”,并在该项目中定义的数组上运行这些函数。我不想在a.h本身中包含任何内容,因为我希望任何未来的项目都能够使用a.h,而无需重写它。但是,我不知道如何使用extern来实现这一点 这里有一个玩具的例子,我到目前为止a实现一个函数f,用于尚未指定的数组 a、 h a、 cpp b、 cpp 当我编译这个时,我得到: In file included from b.cpp:1:0: a.h:2:27: error: array bound is not an

我的目标是,任何项目都可以
#包括“a.h”
,并在该项目中定义的数组上运行这些函数。我不想在
a.h
本身中包含任何内容,因为我希望任何未来的项目都能够使用
a.h
,而无需重写它。但是,我不知道如何使用
extern
来实现这一点

这里有一个玩具的例子,我到目前为止
a
实现一个函数
f
,用于尚未指定的数组

a、 h

a、 cpp

b、 cpp

当我编译这个时,我得到:

In file included from b.cpp:1:0:
a.h:2:27: error: array bound is not an integer constant before ‘]’ token
我阅读了其他相关问题:

。。。但我不知道如何将解决方案应用到我的案例中。问题是,通常人们最终会
#包含定义数组的文件,而我想用另一种方法:在新项目中定义数组,然后
#包含在该数组上操作的共享函数集


编辑1:如果我将
a.h
中的
array
声明替换为以下内容,如@id256所示:

extern int array[];
然后我得到一个不同的错误:

multiple definition of `ARRAY_LEN'

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

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

b、 h

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

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

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

extern int array[];

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

那么声明
extern int array[]
有什么问题?这应该通过将数组作为参数传递给函数来实现;不是通过使用全局变量。使用
std::vector
并通过引用参数传递数组或向量。嗯,我认为我的“编辑1”解决了您的第一个建议,它会导致不同的错误。至于你的第二个建议,我同意这是可行的,但我问这个问题的主要原因是因为我不想将b.h包括在a.h中,或者a.h必须知道关于b.h的任何事情。@cxrogers从a.h中删除ARRAY_LEN的声明;它与b.h中的数组_LEN的定义不匹配,并且不允许对同一事物有两个不匹配的声明/定义。好的,我尝试了这个。我还必须将
extern const int ARRAY\u LEN
添加到a.cpp中,现在它可以工作了。我编辑了您的答案以包含这一行并显示完整的工作代码。谢谢
extern int array[];
multiple definition of `ARRAY_LEN'
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 int array[];