【发布时间】:2018-08-30 21:33:02
【问题描述】:
我正在尝试将美国海军天文台制作的 solar position algorithm(aka "spa") 的适应功能扭曲到我的课程代码中,这样我就可以轻松地调用一个计算太阳位置的方法。
以下代码来自 USNO 的源代码。我正在尝试初始化列表 L_TERMS、B_TERMS 和 R_TERMS
#define L_COUNT 6
#define B_COUNT 2
#define R_COUNT 5
#define Y_COUNT 63
#define L_MAX_SUBCOUNT 64
#define B_MAX_SUBCOUNT 5
#define R_MAX_SUBCOUNT 40
enum {TERM_A, TERM_B, TERM_C, TERM_COUNT};
enum {TERM_X0, TERM_X1, TERM_X2, TERM_X3, TERM_X4, TERM_X_COUNT};
enum {TERM_PSI_A, TERM_PSI_B, TERM_EPS_C, TERM_EPS_D, TERM_PE_COUNT};
enum {JD_MINUS, JD_ZERO, JD_PLUS, JD_COUNT};
enum {SUN_TRANSIT, SUN_RISE, SUN_SET, SUN_COUNT};
#define TERM_Y_COUNT TERM_X_COUNT
const int l_subcount[L_COUNT] = {64,34,20,7,3,1};
const int b_subcount[B_COUNT] = {5,2};
const int r_subcount[R_COUNT] = {40,10,6,2,1};
const double L_TERMS[L_COUNT][L_MAX_SUBCOUNT][TERM_COUNT]=
{ ... }; // contains 3*(64+34+20+7+3+1) = 387 doubles
const double B_TERMS[B_COUNT][B_MAX_SUBCOUNT][TERM_COUNT]=
{ ... }; // contains 3*(5+2) = 21 doubles
const double R_TERMS[R_COUNT][R_MAX_SUBCOUNT][TERM_COUNT]=
{ ... }; // contains 3*(40+10+6+2+1) = 177 doubles
我在使用构造函数初始化数组时遇到了麻烦。我尝试使用初始化列表,但它似乎不起作用。如果我在构造函数中初始化数组,一切都很好,但不会在其他方法的范围内,因为我无法在标题中声明它们。我不能像 const int array 那样初始化它们。
有没有更好的方法来初始化我不知道的多维 const double 数组?
注意:USNO 编写的源代码是用 C 编写的,但我正在尝试在 C++ 中使用它。我应该只包含他们的文件并调用计算功能吗?
【问题讨论】:
-
提示:不要使用数组,使用
std::vector。 -
提示:使用现有的矩阵库。
-
@tadman 为什么要使用
vector而不是已知大小的数组???? -
尝试改用
std::array。 -
@tadman:
std::vector不适合这个目的。std::array更好。
标签: c++ arrays multidimensional-array initialization-list