复制结构没有指针

时间:2015-04-01 22:18:27

标签: c++ pointers structure

我正在尝试在物理组件(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。根据我的理解,这是因为datapreviousData都指向完全相同的结构,因此永远不会有所不同。

由于我的知识很少而对这些指针的了解不多,我该怎么做?有没有办法复制结构,所以它们可以不同?

提前致谢。

2 个答案:

答案 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初始化该结构。