我有一个名为“Turns”的课程,其所有成员都在公开场合。到目前为止,我还没有编辑过这个类的成员的值(只读),但我已经更改了其他头中其他类的值而没有问题。问题是,现在我想改变一个值,不管我怎么试,它似乎都不起作用。
Turns.h
#ifndef TURNS_H
#define TURNS_H
#include "Constants.h"
using namespace Constants;
#include <string>
using namespace std;
#include "utilities.h"
class Turns
{
public:
Turns();
void insertk(double val, int i);
int k[5]; // K denotes the fixed radius for R turns
double K[4];
string TPT; // F for fly-by turns. R for fix turns.
int headings[5]; // Measured from Arrival Airport Threshold
static const int hdgSIZE=5;
double thr2wpt[4]; // Measured from Arrival Airport Threshold
int phi_max[4];
double turnrate_max[4];
double scale;
double Deltachig[4]; // Angle changed
double phi_end[4]; // Estimated phi at the end of the turn
double turnrate[4];
int iend[4]; // Starting distance
};
#endif
Turns.cpp
#include "Turns.h"
Turns::Turns()
{
k[0]=0; k[1]=0; k[2]=0; k[3]=0; k[4]=0;
TPT="FFFFF";
headings[0]=35; headings[1]=60; headings[2]=80; headings[3]=50; headings[4]=40;
thr2wpt[0]=-50*nm2m; thr2wpt[1]=-150*nm2m; thr2wpt[2]=-350*nm2m; thr2wpt[3]=-500*nm2m;
phi_max[0]=16; phi_max[1]=23; phi_max[2]=22; phi_max[3]=1;
turnrate_max[0]=1.5; turnrate_max[1]=3.0; turnrate_max[2]=3.0; turnrate_max[3]=3.0;
scale=1.5;
// We finish to fill
for(int n=0; n<(sizeof(headings)/sizeof(headings[0])-1); n++)
{
K[n]=0;
Deltachig[n]=headings[n+1]-headings[n];
if(abs(Deltachig[n])>180)
Deltachig[n]=Deltachig[n]-360*sign(Deltachig[n]);
phi_max[n]=sign(Deltachig[n])*phi_max[n];
phi_end[n]=phi_max[n]/scale;
turnrate[n]=sign(Deltachig[n])*turnrate_max[n];
iend[n]=0;
}
}
void Turns::insertk(double val, int i)
{
this->k[i]=val;
}
不工作的部分是“insertk”功能。例如,在主要中我有val = 0.00023和i = 0并且“k”的值不会改变。在主要(简化,因为它是一个大项目的一部分)我有:
Turns * tns;
tns=new Turns();
tns->insertk(0.00023, 0);
如果我尝试直接替换该值(由于该成员是公共的,这应该有效),结果是相同的:
tns->k[0]=0.00023
PS:我知道成员应该受到保护,但是我读了很多,我想知道为什么“k”的值不会改变。
答案 0 :(得分:5)
好吧,你的k
数组被声明为一个整数数组。如果将0.00023
指定给整数,则会将其舍入(截断)为0
。因此,这看起来好像k[0]
的值没有改变。它最初为零,在分配后保持为零。然而,这项任务已经完成。
为什么要尝试将0.00023
分配给整数?你不应该使用你的K
数组,它被声明为双数组吗?在任何情况下,在您的班级中拥有两个名为k
和K
的不同数据成员根本不是一个好主意,除非您有一些非常令人信服的理由将其命名为。