编写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[];