C++ 将系数存储在头文件的数组中(“未命名类型”错误)

C++ 将系数存储在头文件的数组中(“未命名类型”错误),c++,arrays,header-files,numeric,C++,Arrays,Header Files,Numeric,我想创建一个类来解决一个数值分析问题,我必须在某个地方存储一个我需要多次使用的double数组。所以我只是创建了一个头文件来保存这些常量 #ifndef COEFFS_H_ #define COEFFS_H_ #include <iostream> #include <complex> using namespace std; const int p = 8; double alpha[p]; alpha[0] = 1.83; alpha[1] = -7.

我想创建一个类来解决一个数值分析问题,我必须在某个地方存储一个我需要多次使用的double数组。所以我只是创建了一个头文件来保存这些常量

#ifndef COEFFS_H_
#define COEFFS_H_

#include <iostream>
#include <complex>

using namespace std;    

const int p = 8;

double alpha[p];
alpha[0] = 1.83;
alpha[1] = -7.15;
alpha[2] =  +9.43;
alpha[3] = -3.76;
alpha[4] = -2.34;
alpha[5] = +4.69;
alpha[6] = -2.78;
alpha[7] = +4.80;

#endif /* COEFFS_H_ */
\ifndef系数_
#定义系数_
#包括
#包括
使用名称空间std;
常数INTP=8;
双α[p];
α[0]=1.83;
α[1]=-7.15;
α[2]=+9.43;
α[3]=-3.76;
α[4]=-2.34;
α[5]=+4.69;
α[6]=-2.78;
α[7]=+4.80;
#endif/*系数*/
在主文件中,我将在for循环中需要这些值:我刚刚做了
#include coefs.h
,但一旦我编译了main,它就会给出错误

“alpha”不命名类型


我是一个初学者,所以我几乎在这里和网上到处找。我发现其他人也有类似的问题,但似乎总是太复杂了。有没有一个非常简单的方法来解决这个问题?

两个错误,首先是正确的语法是

double alpha[p] = { 1.83, -7.15, ... };
不能像以前那样在函数外编写可执行代码

第二,即使使用这种正确的语法,通过在头文件中定义数组,您也有发生多个定义错误的风险。正确的方法是在头文件中声明数组,并在实现文件中定义它

// header file
extern double alpha[]; // declaration

// implementation file
#include "header file.h"

double alpha[p] = { 1.83, -7.15, ... }; // definition

两个错误,第一个正确的语法是

double alpha[p] = { 1.83, -7.15, ... };
不能像以前那样在函数外编写可执行代码

第二,即使使用这种正确的语法,通过在头文件中定义数组,您也有发生多个定义错误的风险。正确的方法是在头文件中声明数组,并在实现文件中定义它

// header file
extern double alpha[]; // declaration

// implementation file
#include "header file.h"

double alpha[p] = { 1.83, -7.15, ... }; // definition

提示:不要在标题中使用
使用namespace
语句。这将在以后给你(以及任何合作者或用户)带来很多悲伤。@Qix monicawasmorteded谢谢你的提示!我可以问一下为什么用它不好吗?这是因为很多人更喜欢::?这不是偏好的问题,而是
使用
将一个符号(或者在
使用命名空间
的情况下,特定命名空间中的所有符号)带入当前范围的事实,在本例中,是“全局”范围。如果其他东西有,例如
struct ostream{}
作为用户定义的类型,使用标头会导致类型冲突。提示:不要在标头中使用
使用namespace
语句。这将在以后给你(以及任何合作者或用户)带来很多悲伤。@Qix monicawasmorteded谢谢你的提示!我可以问一下为什么用它不好吗?这是因为很多人更喜欢::?这不是偏好的问题,而是
使用
将一个符号(或者在
使用命名空间
的情况下,特定命名空间中的所有符号)带入当前范围的事实,在本例中,是“全局”范围。如果其他东西有,例如
struct ostream{}
作为用户定义的类型,使用标头会导致类型冲突。谢谢@john。现在一切都清楚了。实际上,系数是有很多数字的数字。因此,在标题中的声明之后,我在主标题中写了'double alpha[p];α[0]=1.8321743782504412751*1e-14;`其他人也是如此。它起作用了。你能告诉我是否有更好的方法来编写这个定义吗?@VoB我上面描述的相同语法也适用于
main
。谢谢@john。现在一切都清楚了。实际上,系数是有很多数字的数字。因此,在标题中的声明之后,我在主标题中写了'double alpha[p];α[0]=1.8321743782504412751*1e-14;`其他人也是如此。它起作用了。你能告诉我是否有更好的方法来编写这个定义吗?@VoB我上面描述的相同语法也适用于
main