标头中的数组
Arrays in headers
本文关键字:数组 更新时间:2023-10-16
以下问题是我项目的一小部分。我已经简化了很多问题。
我已经全局声明了数组大小和数组。
int N;
double array[N];
现在使用一个函数,我正在填充数组。
void arrayfill()
{
for(int i=0;i<N;i++)
{
array[i] = i;
}
}
接下来,我有一个函数,它根据变量 var 对所有数组的元素求和。
double sum(int var)
{
double s;
for(int i=0;i<var;i++)
{
s+=array[i];
}
return s;
}
现在,我想要的是创建一个具有填充函数的头文件,另一个具有 sum 函数的头文件,最后从我想调用 sum(( 的主函数。我这样做的原因是因为我想填充数组一次,并在许多不同的地方继续使用不同的 var 值的 sum((。
有人可以帮忙吗?
这是一种方法。
array.h:
extern const int N;
extern double array[];
arrayfill.h:
void arrayfill();
arraysum.h:
double sum(int var);
主.cpp:
#include "arrayfill.h"
#include "arraysum.h"
int main()
{
arrayfill();
double s = sum(10);
return 0;
}
数组.cpp:
#include "array.h"
const int N = 200;
double array[N];
数组填充.cpp:
#include "array.h"
#include "arrayfill.h"
void arrayfill()
{
for(int i=0;i<N;i++)
{
array[i] = i;
}
}
数组总和.cpp:
#include "array.h"
#include "arraysum.h"
double sum(int var)
{
double s = 0.0;
for(int i=0;i<var;i++)
{
s+=array[i];
}
return s;
}
使用 g++ 构建程序:
g++ -c array.cpp
g++ -c arrayfill.cpp
g++ -c arraysum.cpp
g++ -c main.cpp
g++ -o arraytest array.o arrayfill.o arraysum.o main.o
在你的标题中,你写道你声明了数组:
// header.h
int N;
double array[N];
这些都不是宣言。 它们都是定义。 要在标头中声明变量,请使用 extern
关键字:
// header.h
extern int N;
extern double array[N];
此外,除非N
是常量,否则不能用作数组的大小,因此我们需要声明N
extern
和const
:
// header.h
extern int const N;
extern double array[N];
在一个源文件中,必须定义N
和array
的存储:
// source.cpp
int const N = 10;
double array[N];
在标头中,为要使用的函数添加声明:
// header.h
// ...as before
void arrayfill();
double sum(int var);
这些是函数声明,而不是定义。 在一个源文件中,您将按照编写它们来放置它们的定义。
您必须在标头中声明数组并拥有一个.cpp
文件,您可以在其中定义它:
whatever.h
:
extern const size_t N = 42;
extern int array[N];
whatever.cpp
:
include "whatever.h"
int array[N];
当编译器只读取包含文件时,它只会注意到,在某个地方有一个大小为 N 的数组。只有当你编译whatever.cpp
编译器才会在数据部分实际生成array
。因此,链接的应用程序中只有一个数组,尽管您从许多不同的位置引用它。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '