Я программирую на C ++ Builder 10.3 от Embarcadero Technology, которая использует компилятор c ++ 17. Я не писал код ниже, и он немного сложнее, чем я привык работать. Я никогда не использовал constexpr раньше.
В нижней части кода ниже, когда компилятор нажимает: "массив constexpr g_PERT_S1" он выдает ошибку "переменная constexpr 'g_PERT_S1' должна быть инициализирована константным выражением. Функция non-constexpr 'data' не может быть используется в массиве константных выражений (226): здесь объявлено "Можете ли вы порекомендовать изменение кода для устранения этой ошибки.
struct AAPLUS_EXT_CLASS ELPMPP02PertubationsCoefficient
{
double m_S;
double m_C;
array<int, 13> m_I;
};
constexpr array<ELPMPP02PertubationsCoefficient, 2> g_PERT_S3_4
{ {
{ -5.458720424980e-07, 2.801517894073e-07, { 0, 0, 2, 0, 0, -18, 16, 0, 0, 0, 0, 0, 0 } },
{ -5.121329506146e-07, -2.627345838573e-07, { 0, 0, 0, 0, 0, 18, -16, 0, 0, 0, 0, 0, 0 } }
} };
struct AAPLUS_EXT_CLASS ELPMPP02Pertubations
{
const ELPMPP02PertubationsCoefficient* m_pTable;
size_t m_nTableSize;
};
/*constexpr variable 'g_PERT_S1' must be initialized by a constant expression
non-constexpr function 'data' cannot be used in a constant expression array(226): declared here*/
constexpr array<ELPMPP02Pertubations, 4> g_PERT_S1 /*ERROR HERE*/
{ {
{ g_PERT_S1_1.data(), g_PERT_S1_1.size() },
{ g_PERT_S1_2.data(), g_PERT_S1_2.size() },
{ g_PERT_S1_3.data(), g_PERT_S1_3.size() },
{ g_PERT_S1_4.data(), g_PERT_S1_4.size() }
} };