同一对象的属性在不同方法间传递数据时出现了错误,请问这是什么原因?应该如何解决?谢谢。

lanc931 2016-05-18 08:17:35
以下是代码
#include<iostream>
#include<cmath>
using namespace std;

const long double GM = 3.9860047e14;
const double We = 7.292115e-5;

class Sate
{
public:
void Pre(double t[7]);
void Cal(Sate a, double t[7]);
void CEs(Sate a);
void Cf(Sate a);
void Cu(Sate a);
void CDeltaU(Sate a);
void CDeltaR(Sate a);
void CDeltaI(Sate a);
void CChanU(Sate a);
void CChanR(Sate a);
void CChanI(Sate a);
void Cx(Sate a);
void Cy(Sate a);
void CL(Sate a);
void CX(Sate a);
void CY(Sate a);
void CZ(Sate a);
void Display(void);
private:
double t[7];
double t0;
double SqrtA;//3-4
double DeltaN;//2-3
double n0;
double n;
double M0;//2-4
double M;
double TOE;//4-1
double es;//3-2
double w;//5-3
double Cuc;//3-1
double Cus;//3-3
double Crc;//5-2
double Crs;//2-2
double Cic;//4-2
double Cis;//4-4
double i0;//5-1
double DeltaI0;//6-1
double OmegaTOE;//4-3
double DeltaOmega;//5-4
double GPSWeek;
double L;
double Es;
double f;
double u;
double DeltaU;
double DeltaR;
double DeltaI;
double ChanU;
double ChanR;
double ChanI;
double x;
double y;
double X;
double Y;
double Z;
};

void Sate::Pre(double t[7])
{
errno_t err;
FILE *fp;
err = fopen_s(&fp, "00052731.98N", "r+");
if (err != 0){
cout << "Can`t open file!" << endl;
exit(1);
}
double x[7], m;
double Para[31];
int Judge = 6;
while (Judge){
Judge = 6;
for (int i = 0; i < 7; i++){
fscanf_s(fp, "%lf", &x[i]);
if (i == 0)continue;
if (x[i] == t[i])Judge--;
}
if (Judge)
for (int n = 0; n < 31; n++)fscanf_s(fp, "%lf", &m);
}
for (int n = 0; n < 31; n++){
fscanf_s(fp, "%lf", ¶[n]); cout << Para[n] << endl;
}

t0 = GPSWeek*604800+t[5] * 3600 + t[6] * 60 + t[7];
SqrtA = Para[10];//3-4
DeltaN = Para[5];//2-3
M0 = Para[6];//2-4
TOE = Para[11];//4-1
es = Para[8];//3-2
w = Para[17];//5-3

Cuc = Para[7];//3-1
Cus = Para[9];//3-3
Crc = Para[16];//5-2
Crs = Para[4];//2-2
Cic = Para[12];//4-2
Cis = Para[14];//4-4
i0 = Para[15];//5-1
DeltaI0 = Para[19];//6-1
OmegaTOE = Para[13];//4-3
DeltaOmega = Para[18];//5-4
GPSWeek = Para[21];
//根据t得到各项参数
//下方计算
double n0 = sqrt(GM) / pow(SqrtA, 3);
double n = n0 + DeltaN;//2-3
double M = M0 + n*(t0 - TOE);
double Omega = OmegaTOE + DeltaOmega*TOE;
double L = OmegaTOE + (DeltaOmega - We)*t0 - DeltaOmega*TOE;
}

void Sate::Cal(Sate a,double t[7])
{
//得到参数
CEs(a);
Cf(a);
Cu(a);
CDeltaU(a);
CDeltaR(a);
CDeltaI(a);
CChanU(a);
CChanR(a);
CChanI(a);
Cx(a);
Cy(a);
CX(a);
CY(a);
CZ(a);
}

void Sate::CEs(Sate a)
{
double E0 = a.M0, Es, temp; cout << " g="<< endl;
do{
Es = a.M0 + a.es*sin(E0);
temp = E0;
E0 = Es;
} while (fabs(temp - E0) >= 1e-12); cout << " E0=" <<E0 << endl;
a.Es = E0;
cout <<" a.Es=" <<a.Es << endl;
}


void Sate::Cf(Sate a)
{
a.f = acos((cos(a.Es) - a.es) / (1 - a.es*cos(a.Es)));
cout << " a.f=" << a.f << endl;
}

void Sate::Cu(Sate a)
{
cout <<"a.f=" << a.f << endl;
a.u = a.w + a.f;
cout << " a.u=" << a.u << endl;
}

void Sate::CDeltaU(Sate a)
{
a.DeltaU = Cuc*cos(2 * u) + Cus*sin(2 * u);
cout << " a.DeltaU=" << a.DeltaU << endl;
}

void Sate::CDeltaR(Sate a)
{
a.DeltaR = Crc*cos(2 * u) + Crs*sin(2 * u);
cout << " a.DeltaR=" << a.DeltaR << endl;
}

void Sate::CDeltaI(Sate a)
{
a.DeltaI = Cic*cos(2 * u) + Cis*sin(2 * u);
cout << " a.DeltaI=" << a.DeltaI << endl;
}

void Sate::CChanU(Sate a)
{
a.ChanU = u + DeltaU;
cout << " a.CChanU=" << a.ChanU << endl;
}

void Sate::CChanR(Sate a)
{
double m = a.SqrtA*a.SqrtA;
a.ChanR = m*(1 - a.es*cos(a.Es) + a.DeltaR);
cout << " a.ChanR=" << a.ChanR << endl;
}

void Sate::CChanI(Sate a)
{
a.ChanI = a.i0 + a.DeltaI + a.DeltaI0*(a.t0 - a.TOE);
cout << " a.ChanI=" << a.ChanI << endl;
}

void Sate::Cx(Sate a)
{
a.x = a.ChanR*cos(a.ChanU);
cout << " a.x=" << a.x << endl;
}

void Sate::Cy(Sate a)
{
a.y = a.ChanR*sin(a.ChanU);
cout << " a.y=" << a.y << endl;
}

void Sate::CX(Sate a)
{
a.X = a.x*cos(a.L) - a.y*cos(a.ChanI)*sin(a.L);
cout << " a.X=" << a.X << endl;
}

void Sate::CY(Sate a)
{
a.Y = a.x*sin(a.L) + a.y*cos(a.ChanI)*cos(a.L);
cout << " a.Y=" << a.Y << endl;
}

void Sate::CZ(Sate a)
{
a.Z = a.y*sin(a.ChanI);
cout << " a.Z=" << a.Z << endl;
}

void Sate::Display(void)
{
cout << "X=" << X << "\tY=" << Y << "\tZ=" << Z;
}

int main()
{

double t[7] = {1, 98, 9, 30, 18, 0, 0.0 };//得到t
Sate m;//建立对象
m.Pre(t);
m.Cal(m,t);
m.Display(); // 得到结果
getchar();
return 0;
}

出错方法的截图

...全文
343 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
橘风之轮 2016-05-18
  • 打赏
  • 举报
回复
最好把所有的入参都采用引用进行传递,采用值传递的方式,可能会遇到你说的问题

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧