我正在尝试在物理组件(Arduinos)和飞行模拟器之间创建一个接口,以便从自建部件控制和显示模拟器事件。我已经开始在学校学习C ++,但从未如此热衷于此 然而,我用来与我的飞行模拟器通信的库是用C ++编写的(它叫做SimConnect),我的payware飞机的SDK也是如此。因此,我认为回到它可能比创建另一种编程语言的包装器更容易。
每次从模拟器接收新数据时,我都会将其传递给函数ProcessNGXData
:
PMDG_NGX_Data* previousData;
bool alreadyProcessed = false;
void ProcessNGXData(PMDG_NGX_Data *data)
{
if (!alreadyProcessed || data->LTS_TaxiSw != previousData->LTS_TaxiSw) {
if (data->LTS_TaxiSw)
printf("Taxi Lights: [ON]\n");
else
printf("Taxi Lights: [OFF]\n");
}
if (!alreadyProcessed) {
alreadyProcessed = true;
}
previousData = data;
}
在其他编程语言中,这可能会正常工作,因此我试图像这样实现它。但是,C ++指针对我来说有点复杂。
条件data->LTS_TaxiSw != previousData->LTS_TaxiSw
永远不会评估为true
。根据我的理解,这是因为data
和previousData
都指向完全相同的结构,因此永远不会有所不同。
由于我的知识很少而对这些指针的了解不多,我该怎么做?有没有办法复制结构,所以它们可以不同?
提前致谢。
答案 0 :(得分:2)
像这样声明previousData:
PMDG_NGX_Data previousData;
(没有星号)。现在,当您想要“保存”结构时,请执行以下操作:
previousData = *data;
(右手边有一个星号)。请注意,这假设PMDG_NGX_Data是可复制的并且具有固定大小。如果它是一个接口或一个抽象类,那么这是不可能的。也许API会为您提供可以调用的“克隆”或“复制”方法。
答案 1 :(得分:1)
如果PMDG_NGX_Data
不是太大而无法复制每个ProcessNGXData
,您可以尝试这样做:
PMDG_NGX_Data previousData;
bool alreadyProcessed = false;
void ProcessNGXData(PMDG_NGX_Data *data)
{
if (!alreadyProcessed || data->LTS_TaxiSw != previousData.LTS_TaxiSw) {
if (data->LTS_TaxiSw)
printf("Taxi Lights: [ON]\n");
else
printf("Taxi Lights: [OFF]\n");
}
if (!alreadyProcessed) {
alreadyProcessed = true;
}
previousData = *data;
}
如果它太大,你可以创建一个结构,它只包含你需要比较的字段,并由PMDG_NGX_Data
初始化,并按ProcessNGXData
初始化该结构。