【发布时间】:2015-04-01 22:18:26
【问题描述】:
我正在尝试在物理组件 (Arduino) 和飞行模拟器之间创建一个接口,以便控制和显示来自自建部件的模拟器事件。我在学校就开始学习 C++,但从来没有那么热衷于它。
然而,我用来与飞行模拟器通信的库是用 C++ 编写的(称为SimConnect),我的付费软件飞机的 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 都是指向完全相同结构的指针,因此永远不会不同。
以我的知识和对这些指针的了解不多,我该怎么做?有没有办法复制结构,所以它们可以不同?
提前致谢。
【问题讨论】:
-
保存之前的
bool值LTS_TaxiSw怎么样? -
这也是他们在 SDK 示例中所做的(他们只跟踪了两个值)。但是,稍后这将跟踪数十个结构值,我宁愿不为每个值创建另一个变量。
-
我很困惑,所以你传入
ProcessNGXData的数据也是previousData? -
您可以将
PMDG_NGX_Data* previousData;更改为不是指针。然后previousData = *data;会复制内容。 -
使用点运算符
data.field访问结构体