Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 28.06.2019
Сообщений: 129
Записей в блоге: 3

Проблема с глобальными переменными

18.12.2019, 19:22. Показов 583. Ответов 3

Студворк — интернет-сервис помощи студентам
Итак, имеется программа - Математическая Модель движения движения объекта.
В ней планируется использование нескольких (около десятка) элементов (.срр), что бы логически распределить все функции, классы, методы и т.д...
Суть работы программы - в нее по UDP приходит разовый массив данных (16 параметров). Когда приходит квитанция "ПУСК"(bool -> true), то начинается обработка этих параметров и на выход отправляется динамический массив данных (порядка 20 параметров). Внутри же задействовано около 250 переменных, 100 констант и более 200 функций void\int.
Все начиналось хорошо, но как только я создал несколько *.срр файлов, появились проблемы, а именно: в Header'e (.h) я объявил переменные, к которым обращаюсь из разных модулей. Логично, у меня вылезла ошибка LNK2005говорящая о том, что такая-то такая-то переменная уже определена в объектном файле.
применить extern для того, что бы объявить глобальную переменную не получилось.
Вопрос - как реализовать метод в котором я могу обращаться к одной и той же переменной из разных модулей (допустим блок физических постоянных)?

Исходники ПО MathModel

Кликните здесь для просмотра всего текста
MM_MP.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
//#include "MM_H.h"
//#include <cmath>
#include <math.h>
 
 
///////////////////////////////////////////////////////////
// Вычисление ускорений, обусловленных притяжением Земли //
///////////////////////////////////////////////////////////
 
//Числовые значения постоянных гравитационного поля Земли
 
//начальные значения для геопотенциальных коэффициентов
double czon[13];
double ctes[78];
double stes[78];
 
char CharSelF; //to select forces
 
typedef double TVect3[3];
TVect3 TMatr33[3];
/*
Коэффициенты разложения гравитационного поля Земли 
в ряд по сферическим гармоникам имеют числовые значения указанные в HCSV
*/
void HCSV() 
{
    czon[1]     = 0.0 ;
    czon[2]     = -1.082636023e-03;  //  2   0 -1082.63602298 
    czon[3]     = +2.532435e-0;      //  3   0     2.53243535 
    czon[4]     = +1.619331e-06;     //  4   0     1.61933121 
    czon[5]     = +2.277161e-07;     //  5   0     0.22771610 
    czon[6]     = -5.396485e-07;     //  6   0    -0.53964849 
    czon[7]     = +3.513684e-07;     //  7   0     0.35136844 
    czon[8]     = +2.025187e-07;     //  8   0     0.20251872 
    czon[9]     = +1.193687e-07;     //  9   0     0.11936871 
    czon[10]    = +2.480569e-07;     // 10   0     0.24805686 
    czon[11]    = -2.405652e-07;     // 11   0    -0.24056521 
    czon[12]    = +1.819117e-07;     // 12   0     0.18191170 
    ctes[1]     = -2.41399954e-10;   //  2   1 
    stes[1]     = +1.54309997e-09;   //  2   1 
    ctes[2]     = +2.19279880e-06;   //  3   1 
    stes[2]     = +2.68011894e-07;   //  3   1 
    ctes[3]     = -5.08725304e-07;   //  4   1 
    stes[3]     = -4.49459935e-07;   //  4   1 
    ctes[4]     = -5.37165102e-08;   //  5   1 
    stes[4]     = -8.06634638e-08;   //  5   1 
    ctes[5]     = -5.98779769e-08;   //  6   1 
    stes[5]     = +2.11646643e-08;   //  6   1 
    ctes[6]     = +2.05148728e-07;   //  7   1
    stes[6]     = +6.93698935e-08;   //  8   1
    ctes[7]     = +1.60345872e-08;   //  8   1
    stes[7]     = +4.01997816e-08;   //  9   1
    ctes[8]     = +9.24192722e-08;   //  9   1
    stes[8]     = +1.42365696e-08;   //
    ctes[9]     = +5.17557870e-08;   //
    stes[9]     = -8.12891488e-08;   //
    ctes[10]    = +9.50842760e-09;   //
    stes[10]    = -1.64654645e-08;   //
    ctes[11]    = -3.06800094e-08;   //
    stes[11]    = -2.37844845e-08;   //
    ctes[12]    = +1.57453604e-06;   //
    stes[12]    = -9.03868073e-07;   //
    ctes[13]    = +3.09016045e-07;   //
    stes[13]    = -2.11402398e-07;   //
    ctes[14]    = +7.84122308e-08;   //
    stes[14]    = +1.48155457e-07;   //
    ctes[15]    = +1.05590535e-07;   //
    stes[15]    = -5.23267240e-08;   //
    ctes[16]    = +6.01209884e-09;   //
    stes[16]    = -4.65039481e-08;   //
    ctes[17]    = +3.28449048e-08;   //
    stes[17]    = +9.28231439e-09;   //
    ctes[18]    = +6.57654233e-09;   //
    stes[18]    = +5.38131641e-09;   //
    ctes[19]    = +1.56687424e-09;   //
    stes[19]    = -2.22867920e-09;   //
    ctes[20]    = -5.56284564e-09;   //
    stes[20]    = -3.05712916e-09;   //
    ctes[21]    = +9.54203028e-10;   //
    stes[21]    = -5.09736032e-09;   //
    ctes[22]    = +6.38039765e-10;   //
    stes[22]    = +1.41642228e-09;   //
    ctes[23]    = +1.00558857e-07;   //
    stes[23]    = +1.97201324e-07;   //
    ctes[24]    = +5.92157432e-08;   //
    stes[24]    = -1.20112918e-08;   //
    ctes[25]    = -1.49261539e-08;   //
    stes[25]    = -7.10087714e-09;   //
    ctes[26]    = +1.18226641e-09;   //
    stes[26]    = +1.84313369e-10;   //
    ctes[27]    = +3.52854052e-09;   //
    stes[27]    = -3.06115024e-09;   //
    ctes[28]    = -1.94635815e-10;   //
    stes[28]    = -8.72351950e-10;   //
    ctes[29]    = -1.21727527e-09;   //
    stes[29]    = -5.63392145e-10;   //
    ctes[30]    = -4.19599893e-11;   //
    stes[30]    = -8.98933286e-10;   //
    ctes[31]    = -1.40960772e-10;   //
    stes[31]    = -6.86352078e-10;   //
    ctes[32]    = +1.45191793e-10;   //
    stes[32]    = +9.15457482e-11;   //
    ctes[33]    = -3.98239574e-09;   //
    stes[33]    = +6.52560581e-09;   //
    ctes[34]    = -2.29791235e-09;   //
    stes[34]    = +3.87300507e-10;   //
    ctes[35]    = -3.26413891e-10;   //
    stes[35]    = -1.78449133e-09;   //
    ctes[36]    = -5.85119492e-10;   //
    stes[36]    = -2.63618222e-10;   //
    ctes[37]    = -3.18935802e-10;   //
    stes[37]    = +9.11773560e-11;   //
    ctes[38]    = -7.01856112e-12;   //
    stes[38]    = +1.71730872e-11;   //
    ctes[39]    = -4.96702541e-11;   //
    stes[39]    = -4.62248271e-11;   //
    ctes[40]    = -1.68525661e-11;   //
    stes[40]    = -2.67779792e-11;   //
    ctes[41]    = -2.12381469e-11;   //
    stes[41]    = +9.17051709e-13;   //
    ctes[42]    = +4.30476750e-10;   //
    stes[42]    = -1.64820395e-09;   //
    ctes[43]    = -2.15577115e-10;   //
    stes[43]    = -4.32918170e-10;   //
    ctes[44]    = +5.81848555e-13;   //
    stes[44]    = +6.39725265e-12;   //
    ctes[45]    = -4.61517343e-12;   //
    stes[45]    = +1.61252083e-11;   //
    ctes[46]    = -1.66973699e-12;   //
    stes[46]    = -5.55091854e-12;   //
    ctes[47]    = -3.07428287e-12;   //
    stes[47]    = -3.12226930e-12;   //
    ctes[48]    = +1.48944116e-12;   //
    stes[48]    = +1.98250517e-12;   //
    ctes[49]    = +8.27990199e-13;   //
    stes[49]    = +2.03324862e-13;   //
    ctes[50]    = +2.21369255e-12;   //
    stes[50]    = -5.52771222e-11;   //
    ctes[51]    = -2.49071768e-11;   //
    stes[51]    = +1.05348786e-11;   //
    ctes[52]    = -1.83936427e-12;   //
    stes[52]    = +8.62774317e-12;   //
    ctes[53]    = +8.29672520e-13;   //
    stes[53]    = +2.94031315e-12;   //
    ctes[54]    = -2.59723183e-13;   //
    stes[54]    = -5.51559139e-13;   //
    ctes[55]    = -5.75467116e-15;   //
    stes[55]    = +1.34623363e-13;   //
    ctes[56]    = +7.88309139e-15;   //
    stes[56]    = +9.33540765e-14;   //
    ctes[57]    = +2.55907810e-14;   //
    stes[57]    = +4.47598342e-13;   //
    ctes[58]    = +3.42976182e-13;   //
    stes[58]    = +3.81476567e-13;   //
    ctes[59]    = -2.25197343e-13;   //
    stes[59]    = -1.84679217e-13;   //
    ctes[60]    = +6.90915376e-15;   //
    stes[60]    = -2.65068061e-15;   //
    ctes[61]    = +1.95426202e-15;   //
    stes[61]    = -3.72803733e-14;   //
    ctes[62]    = -4.13155736e-15;   //
    stes[62]    = +7.89991291e-15;   //
    ctes[63]    = -1.58033229e-13;   //
    stes[63]    = +1.53533814e-13;   //
    ctes[64]    = +6.14439391e-14;   //
    stes[64]    = -9.85618446e-16;   //
    ctes[65]    = +4.63531420e-15;   //
    stes[65]    = -1.05284266e-14;   //
    ctes[66]    = -2.92494873e-16;   //
    stes[66]    = +1.17044830e-15;   //
    ctes[67]    = -5.70825414e-16;   //
    stes[67]    = +3.70152251e-16;   //
    ctes[68]    = -3.67676273e-15;   //
    stes[68]    = +7.44103881e-15;   //
    ctes[69]    = +2.33014817e-15;   //
    stes[69]    = -7.01194816e-16;   //
    ctes[70]    = -1.93432044e-16;   //
    stes[70]    = +2.58524487e-16;   //
    ctes[71]    = +1.01272849e-16;   //
    stes[71]    = +6.13664388e-17;   //
    ctes[72]    = +4.17080240e-16;   //
    stes[72]    = -9.89260955e-17;   //
    ctes[73]    = -4.94639649e-17;   //
    stes[73]    = -1.73664923e-17;   //
    ctes[74]    = -1.84017258e-18;   //
    stes[74]    = +9.24242436e-18;   //
    ctes[75]    = +9.35170551e-18;   //
    stes[75]    = -1.40785570e-17;   //
    ctes[76]    = +4.97869995e-19;   //
    stes[76]    = -2.79007835e-19;   //
    ctes[77]    = -2.10894892e-20;   //
    stes[77]    = -9.83829860e-20;   //
    }
 
////////////////////////////////
//  ИНТЕГРИРОВАНИЕ УРАВНЕНИЙ  //
//          ДВИЖЕНИЯ          //
////////////////////////////////
 
// Неявный одношаговый метод численного интегрирования 
// дифференциального уравнения движения.
// Everhart Е. Implicit single-sequence methods for integrating orbits.
 
    double StepRada[8];
    double DimCoefR[8];
    double DimCoefV[8];
    TVect3 CoefEver[8];
    TVect3 EverAlfa[8];
    int MemAlpha;
    double AlphaMom[2][4];
 
void EerInit() {
    StepRada[1] = 0.000000000000000000;
    StepRada[2] = 0.056262560526922147;
    StepRada[3] = 0.180240691736892365;
    StepRada[4] = 0.352624717113169637;
    StepRada[5] = 0.547153626330555383;
    StepRada[6] = 0.734210177215410532;
    StepRada[7] = 0.885320946839095768;
    StepRada[8] = 0.977520613561287501;
    DimCoefR[1] = 0.500000000000000000;
    DimCoefR[2] = 0.166666666666666667;
    DimCoefR[3] = 0.083333333333333333;
    DimCoefR[4] = 0.050000000000000000;
    DimCoefR[5] = 0.033333333333333333;
    DimCoefR[6] = 0.023809523809523810;
    DimCoefR[7] = 0.017857142857142857;
    DimCoefR[8] = 0.013888888888888889;
    DimCoefV[1] = 1.000000000000000000;
    DimCoefV[2] = 0.500000000000000000;
    DimCoefV[3] = 0.333333333333333333;
    DimCoefV[4] = 0.250000000000000000;
    DimCoefV[5] = 0.200000000000000000;
    DimCoefV[6] = 0.166666666666666667;
    DimCoefV[7] = 0.142857142857142857;
    DimCoefV[8] = 0.125000000000000000;
    CharSelF = 'A'; //all forces var from MM_H.h
}
 
void ECNullo() { //initial moment nullo to start
    int i, j;
    for(i=1; i<9; ++i)
        for (j = 1; j < 9; ++j) {
            CoefEver[i][j] = 0.0;
            EverAlfa[i][j] = 0.0;
        }
    MemAlpha = 0;
    for (i = 1; i < 2; ++i)
        for (j = 1; j < 4; ++j)
            AlphaMom[i][j] = 0.0;
}
 
int KeplerEqation(double ElmE, double MeanAnom) {
    int iter, numitere;
    double EccAnom;
    double cura, difa;
    double ECECE;
    cura = MeanAnom + ElmE * sin(MeanAnom);
    EccAnom = cura;
    difa = 1.0;
    iter = 0;
    while ((difa>1.0e-15)and(iter<241))
    {
        EccAnom = cura - (cura - ElmE * sin(cura) - MeanAnom) / (1 - ElmE * cos(cura));
        difa = fabs(cura - EccAnom);
        iter = iter + 1;
    }
    numitere = iter + 1;
    ECECE = EccAnom;
    return  ECECE;
}

MathModel.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
#include <iostream>
#include <math.h>
#include <cmath>
#include <ctime>
#include <string>
#include <iomanip>
#include <stdio.h>
#include "MM_H.h"
 
#define DEBUG_MODE  //Debug mode only for developers
#define UDP_CONNECT //Обмен по Ethernet
 
extern double Delta_D, m2, m3, u;
 
////////////////////////
// УРАВНЕНИЯ ДВИЖЕНИЯ //
////////////////////////
 
// 1. Алгоритмы операций с матрицами и векторами //
// 1.1. Вычисление матриц поворота //
void ForRotMatr(int iaxis,double angle,TVect3 Matr) {
    int i, j;
    double s, c;
    c = cos(angle);
    s = sin(angle);
    for (i = 1; i < 4; i++)
        for (j = 1; j < 4; j++)
            if (i = j)
                Matr[i, j] = 1, 0;
            else
            {
                Matr[i, j] = 0, 0;
            }
    switch (iaxis)
    {
    case 1: //rotate around OX axis
        Matr[2, 2] = +c;
        Matr[2, 3] = +s;
        Matr[3, 2] = -s;
        Matr[3, 3] = +c;
    case 2: //rotate around OY axis
        Matr[1,1] = +c;
        Matr[1,3] = -s;
        Matr[3,1] = +s;
        Matr[3,3] = +c;
    case 3: //rotate around OZ axis
        Matr[1, 1] = +c;
        Matr[1, 2] = +s;
        Matr[2, 1] = -s;
        Matr[2, 2] = +c;
    default:
        break;
    }
}
 
// 1.2. Преобразование сферических координат к прямоугольным //
void DFSC(double Azt, //Азимут
          double Alt, //Высота
          double  Ro, //Ro
           TVect3 PD  //PosDescart - 
) {
    double cb;
    cb = cos(Alt);
    PD[1] = Ro * cos(Azt) * cb; // X
    PD[2] = Ro * sin(Azt) * cb; // Y
    PD[3] = Ro * sin(Alt);      // Z
}
 
 
 
 
/////
//+//
/////
 
void OEOM() {
 
}
 
void OrbSpeed(int h) {
    double pr;
    pr = sqrt(u/pow(h+Re,3));
    Worb = floor(pr);
}
 
void XYZ_from(double i, //Наклонение
              double a, //Большая полуось
              double e, //Эксцентриситет
              double W, //Долгота восходящего узла
              double _w //Аргумент широты перигея
) {
    double x, y, z;
}
 
void kgpt(double gam, double psi, double tet, double* c0, double* c1, double* c2, double* c3)
{
    double sp, cp, st, ct, sg, cg;
 
    sp = sin(psi / 2.0);
    cp = cos(psi / 2.0);
    st = sin(tet / 2.0);
    ct = cos(tet / 2.0);
    sg = sin(gam / 2.0);
    cg = cos(gam / 2.0);
    *c0 = cg * cp * ct - sg * sp * st;
    *c1 = sg * cp * ct + cg * sp * st;
    *c2 = cg * sp * ct - sg * cp * st;
    *c3 = sg * sp * ct + cg * cp * st;
}
 
// Закон притяжения
void _F(double m1, double m2, double D) {
    F_out = f * m1 * m2 / (D * D);
}
 
// Расстояние между Ц.М. М1(х) и М2(_х)
void deltaa(double x, double y, double z, double _x, double _y, double _z) {
    Delta_D = sqrt(pow((x - _x), 2) + pow((y - _y), 2) + pow((z - _z), 2));
}
 
void ncos(double alpha, double betta, double gamma, double x, double y, double z, double _x, double _y, double _z) {
    alpha = (x - _x) / Delta_D;
    betta = (y - _y) / Delta_D;
    gamma = (z - _z) / Delta_D;
}
 
///////////////////////////////////////////////
///////////////////////////////////////////////
 
#ifdef DEBUG_MODE
 
void EnterNU() {
    setlocale(LC_ALL, "Russian");
    std::cout << "ВВОД НУ ВРУЧНУЮ\n";
    std::cout << "Большая полуось ";
    std::cin >> p1;
    std::cout << "Эксцентриситет ";
    std::cin >> e1;
    std::cout << "Долгота восх. узла ";
    std::cin >> om1;
    std::cout << "Наклонение ";
    std::cin >> i1;
    std::cout << "Аргумент широты перегея ";
    std::cin >> sig1;
    std::cout << "Истиная аномалия ";
    std::cin >> fi1;
    std::cout << "Баллистический коэффециент ";
    std::cin >> cb1;
    std::cout << "Масса корабля ";
    std::cin >> massTK;
    std::cout << "Час начала режима ";
    std::cin >> hour_m;
    std::cout << "минуты начала режима";
    std::cin >> min_m;
    std::cout << "Секунды начала режима ";
    std::cin >> sec_m;
    std::cout << "День ";
    std::cin >> ddn;
    std::cout << "Месяц ";
    std::cin >> mmn;
    std::cout << "Год ";
    std::cin >> yyn;
 
}
 
 
 
void ControlDyn() {
    setlocale(LC_ALL, "Russian");
    std::cout << "Время " << hour_m << ":" << min_m << ":" << sec_m << "      " << "Дата " << ddn << "." << mmn << "." << yyn << "\n";
    std::cout << "--------------------------------------------------------------------------------------\n";
    std::cout << "   Центр масс в J2000         Кватернион ССК РС\n";
    std::cout << " X   "<< std::setw(7) << "             " << "0.000000" << "\n";
    std::cout << " Y   " << "0.000000" << "             " << "0.000000" << "\n";
    std::cout << " Z   " << "0.000000" << "             " << "0.000000" << "\n";
}
 
#endif // DEBUG_MODE
 
//|//|//|//|//|//|// 
//  MODEL PROCESS //
//|//|//|//|//|//|//
 
void StartModel() {
    system("cls");
    std::cout << "Model Process... ";
}
 
// // // // // // // // // // // 
 
void StartM() { // Запуск моделирования
    int v;
    system("cls");
    std::cout << "1 - ПУСК моделирования\n";
    std::cout << "2 - Повторить ввод НУ\n";
    std::cout << "3 - Выход\n";
    std::cin >> v;
    if (v = 1) {
        StartModel();
    }
}
 
 
void intro()
{
    setlocale(LC_ALL, "Russian");
    std::cout << "Математическая Модель Движения\n";
    std::cout << "------------------------------\n";
    std::cout << "Введите m1\n";
    std::cin >> massTK;
    std::cout << "Введите m2\n";
    std::cin >> m2;
    std::cout << "Введите расстоние\n";
    std::cin >> delta_r;
    _F(massTK, m2, delta_r);
    system("cls");
    std::cout << "F = " << F_out;
    std::cout << "\n";
    
}
 
 
int main()
{
    system("cls");
#ifdef DEBUG_MODE
    EnterNU(); //Вводим НУ
    StartM();
#endif // DEBUG_MODE
    return EXIT_SUCCESS;
}

MM_H.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#pragma once
/////////////
// M I S C //
/////////////
 
double F_out;
double Delta_D;
double m2, //Масса ТК
m3, //Масса МКС
m4; //Масса ТК2
char CharSelF; //to select forces
 
double X_TK, //Soyz CM position
Y_TK,
Z_TK;
 
//////////////
// OUT DATA //
//////////////
    //  ТК  //
    double  r1x1;   //  Вектор положения ц.м. ТК в J2000
    double  r1y1;
    double  r1z1;
    double  v1x1;   //  Скорость ц.м. ТК в J2000
    double  v1y1;
    double  v1z1;
    double  L0;    //   кватернион разворота ССК ТК относительно J2000 
    double  L1;
    double  L2;
    double  L3;
    double  om1x31; //  Вектор угловой скорости ТК относительно J2000 в проекциях на ССК ТК 
    double  om1y31;
    double  om1z31;
    double  cm1x;   //  Координаты ц.м. ТК в ТГК/ ТПК
    double  cm1y;
    double  cm1z;
 
    double TK_DATA_MASSIVE[15];
    double DOS_DATA_MASSIVE[15];
 
///////////////////////
//  ORBITAL ELEMENTS //
///////////////////////
    double Worb; //Orbital speed
 
/////////////////////////
//  НАЧАЛЬНЫЕ УСЛОВИЯ  //
/////////////////////////
    int hour_m;    //час начала режима
    int min_m;     //минуты начала режима
    int sec_m;     //секунды начала режима
    int ddn;       //день начала режима
    int mmn;       //месяц начала режима
    int yyn;       //год начала режима
 
    double p1;     //Большая полуось орбиты ТК.
    double e1;     //Эксцентриситет орбиты ТК.
    double om1;    //Долгота восходящего узла орбиты ТК.
    double i1;     //Наклонение орбиты ТК.
    double sig1;   //Аргумент широты перигея орбиты ТК.
    double fi1;    //Истинная аномалия ТК.
    double cb1;    //баллистический коеффициент ТК.
    double massTK; //масса ТК.
 
    double h1;     //Высота ц.м. ТК над поверхностью Земли.
 
    double j_j1_mas[9]; //Массив моментов инерции ТК
 
    double delta_r; //Расстоние от Ц.М. земли до Ц.М. объекта
/////////////
// M A T H //
/////////////
 
typedef double TVect3[3];
TVect3 TMatr33[3];
 
 
//////////////////////////
// ФИЗИЧЕСКИЕ КОНСТАНТЫ //
//////////////////////////
    //  Имена переменных и констант взяты из Дубошин.Небесная Механика ТОМ 1
 
    int X_e = 0.0, //Коор. Ц.М. Земли, они же - нуль сцены
        Y_e = 0.0,
        Z_e = 0.0;
 
    // EARTH PARAMETERS //
    const double f = 6.67384e-11;   //Постоянная притяжения
    const double Me = 5.972e-24;     //Масса Земли
    const double We = 0.00007292115; //Угловая скорость вращения земли
    double       u = f * Me;         //Гравитационный параметр ~398 600,441
    const int    Re = 6371;          //Радиус Земли
    const double a_e = 6378136;      //Большая полуось общеземного эллипсоида
 
    //Epoch Parameters //
    const double JD2000 = 2451545.0;
    const double JulianC = 36525.0;   //1 юлианский век
 
 
////////////////////
// ИНТЕГРИРОВАНИЕ //
////////////////////
double dt; //Шаг интегрирования
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.12.2019, 19:22
Ответы с готовыми решениями:

Ошибка при работе с глобальными переменными
Учусь по книге Г.Шилдта - С++ базовый курс , 3е издание. Прохожу тему глобальных переменных, вот код- #include &lt;iostream&gt; ...

Проблема с переменными
Я недавно начал изучать c++ и решил создать небольшой текстовый файтинг. Я столкнулся с небольшой проблемой: после изменения переменных, их...

Проблема с переменными
Доброго времени суток! При написании кода столкнулся с данной ошибкой: invalid conversion from 'const uint16_t (*) {aka const short...

3
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
18.12.2019, 20:57
В одном из .cpp файлов (например MathModel.cpp) объявляете эти переменные обычным образом:
C++
1
double Delta_D, m2, m3, u;
а в MM_H.h файле - с префиксом extern
C++
1
extern double Delta_D, m2, m3, u;
1
2 / 2 / 0
Регистрация: 28.06.2019
Сообщений: 129
Записей в блоге: 3
18.12.2019, 22:30  [ТС]
Да, это помогло, спасибо!
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12925 / 6793 / 1819
Регистрация: 18.10.2014
Сообщений: 17,190
18.12.2019, 22:34
Цитата Сообщение от Dima_control Посмотреть сообщение
у меня вылезла ошибка LNK2005
Глобальные переменные в заголовочных файлах следует определять как inline:

C++
1
2
3
4
5
inline double F_out;
inline double Delta_D;
inline double m2, //Масса ТК
  m3, //Масса МКС
  m4; //Масса ТК2
и т.д.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.12.2019, 22:34
Помогаю со студенческими работами здесь

Проблема с переменными
Доброго времени суток! При написании кода столкнулся с данной ошибкой: invalid conversion from 'const uint16_t (*) {aka const short...

Проблема с переменными
Здравствуйте, недавно возникла такая проблема: писал я, значит, элементарную программу на с++ с таблицей умножения, запустил и заметил...

Проблема с extern-переменными
Такие дела. У меня два файла, func.cpp и main.cpp //func.cpp double sum, count; double average(double num) { sum += num; ...

Проблема со статическими переменными в рекурсии
Собственно, преподаватель требует, чтобы была одна входная переменная А и точность (10^-6) Функцию написал, но при другом А, счетчик...

Прога на Билдере 5.Проблема с динамическими переменными
вылетает ошибка:Projest такой-то raised exception class EAccessViolation with message 'Access violation at adress 325032ce.Write of address...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru