• 记录成员变量赋值的坑


    先上错误代码:

            //闯红灯1
            if(AgainstRedLight == algVIRConfigInput.currentEIllegalType)
            {
                processForAgainstRedLight(labels, algVIRConfigOutput);
            }
            //越线停车2
            if(CoverStopLine == algVIRConfigInput.currentEIllegalType)
            {
                processForCoverStopLine(labels, algVIRConfigOutput);
            }
            //违反导向3
            if(AgainstDirection == algVIRConfigInput.currentEIllegalType)
            {
                processForAgainstDirection(labels, algVIRConfigOutput);
            }
            //逆行4
            if(Retrograde == algVIRConfigInput.currentEIllegalType)
            {
                processForRetrograde(labels, algVIRConfigOutput);
            }
            //压实线5
            if(CrossLine == algVIRConfigInput.currentEIllegalType)
            {
                processForCrossLine(labels, algVIRConfigOutput);
            }
            //违法变道6
            if(IllegalLaneChange == algVIRConfigInput.currentEIllegalType)
            {
                processForIllegalLaneChange(labels, algVIRConfigOutput);
            }
            //借道超车7
            if(AgainstInsert == algVIRConfigInput.currentEIllegalType)
            {
                processForAgainstInsert(labels, algVIRConfigOutput);
            }
            //手持违停
            if(ViolationParking == algVIRConfigInput.currentEIllegalType)
            {
                processForViolationParking(labels, algVIRConfigOutput);
            }
            //黄网格停车
            if(YellowGridParking == algVIRConfigInput.currentEIllegalType)
            {
                processForYellowGridParking(labels, algVIRConfigOutput);
            }
            //占用公交车道
            if(AgainstBusLaneWithSign == algVIRConfigInput.currentEIllegalType)
            {
                processForAgainstBusLaneWithSign(labels, algVIRConfigOutput);
            }
            //占用非机动车道
            if(AgainstBicycleLane == algVIRConfigInput.currentEIllegalType)
            {
                processForAgainstBicycleLane(labels, algVIRConfigOutput);
            }
            //占用紧急车道
            if(AgainstEmergencyLane == algVIRConfigInput.currentEIllegalType)
            {
                processForAgainstEmergencyLane(labels, algVIRConfigOutput);
            }
            //高速超速
            if(AgainstHighSpeed == algVIRConfigInput.currentEIllegalType)
            {
                processForAgainstAgainstHighSpeed(labels, algVIRConfigOutput);
            }
            //礼让行人
            if(AgainstLetPedestrian == algVIRConfigInput.currentEIllegalType)
            {
                processForAgainstAgainstLetPedestrian(labels, algVIRConfigOutput);
            }
            //主驾打电话
            if(AgainstCalling == algVIRConfigInput.currentEIllegalType)
            {
                processForAgainstAgainstCalling(labels, algVIRConfigOutput);
            }
            //未系安全带
            if(AgainstNoBelt == algVIRConfigInput.currentEIllegalType)
            {
                processForAgainstNoBelt(labels, algVIRConfigOutput);
            }
        algVIRConfigOutput_ = algVIRConfigOutput;
    
    int Alg_VIR_config::getConfigStruct(Alg_VIR_configOutput &algVIRConfigOutput)
    {
        algVIRConfigOutput.has_confile = algVIRConfigOutput_.has_confile;
        algVIRConfigOutput.algVIRConfigAgainstBicycleLane = algVIRConfigOutput_.algVIRConfigAgainstBicycleLane;
        algVIRConfigOutput.algVIRConfigAgainstBusLaneWithSign = algVIRConfigOutput_.algVIRConfigAgainstBusLaneWithSign;
        algVIRConfigOutput.algVIRConfigAgainstCalling = algVIRConfigOutput_.algVIRConfigAgainstCalling;
        algVIRConfigOutput.algVIRConfigAgainstDirection = algVIRConfigOutput_.algVIRConfigAgainstDirection;
        algVIRConfigOutput.algVIRConfigAgainstEmergencyLane = algVIRConfigOutput_.algVIRConfigAgainstEmergencyLane;
        algVIRConfigOutput.algVIRConfigAgainstHighSpeed = algVIRConfigOutput_.algVIRConfigAgainstHighSpeed;
        algVIRConfigOutput.algVIRConfigAgainstInsert = algVIRConfigOutput_.algVIRConfigAgainstInsert;
        algVIRConfigOutput.algVIRConfigAgainstLetPedestrian = algVIRConfigOutput_.algVIRConfigAgainstLetPedestrian;
        algVIRConfigOutput.algVIRConfigAgainstNoBelt = algVIRConfigOutput_.algVIRConfigAgainstNoBelt;
        algVIRConfigOutput.algVIRConfigAgainstRedLight = algVIRConfigOutput_.algVIRConfigAgainstRedLight;
        algVIRConfigOutput.algVIRConfigCoverStopLine = algVIRConfigOutput_.algVIRConfigCoverStopLine;
        algVIRConfigOutput.algVIRConfigCrossLine = algVIRConfigOutput_.algVIRConfigCrossLine;
        algVIRConfigOutput.algVIRConfigIllegalLaneChange = algVIRConfigOutput_.algVIRConfigIllegalLaneChange;
        algVIRConfigOutput.algVIRConfigRetrograde = algVIRConfigOutput_.algVIRConfigRetrograde;
        algVIRConfigOutput.algVIRConfigViolationParking = algVIRConfigOutput_.algVIRConfigViolationParking;
        algVIRConfigOutput.algVIRConfigYellowGridParking = algVIRConfigOutput_.algVIRConfigYellowGridParking;
    }
    

    可以看出,我想实现的效果是,每次上层修改了某个违法类型的规则之后,对algVIRConfigOutput中相应的成员变量进行修改,然后赋值给algVIRConfigOutput_(类的私有成员变量,全局的),通过调用getConfigStruct函数,将algVIRConfigOutput_中保存的内容传递出去;

    但是实际却没有达到上述效果,algVIRConfigOutput中存储的貌似还是默认值;

    后来经过调试发现问题所在:

    在algVIRConfigOutput_ = algVIRConfigOutput;这个语句中,将algVIRConfigOutput中的值赋值给algVIRConfigOutput_,例如,闯红灯调用了该函数进行规则配置,上层传递的只是闯红灯的规则配置修改了,违反导向由于没有传递进行,algVIRConfigOutput中相应的变量值还保持着初始化的时候的变量值(也就是默认值),然后在赋值给algVIRConfigOutput_的时候,违反导向的相应值又会被覆盖掉,同理,修改违反导向的时候,也会把闯红灯的覆盖为默认值。

    后续修改的代码如下:

    //闯红灯1
            if(AgainstRedLight == algVIRConfigInput.currentEIllegalType)
            {
                processForAgainstRedLight(labels, algVIRConfigOutput);
                algVIRConfigOutput_.algVIRConfigAgainstRedLight = algVIRConfigOutput.algVIRConfigAgainstRedLight;
            }
            //越线停车2
            if(CoverStopLine == algVIRConfigInput.currentEIllegalType)
            {
                processForCoverStopLine(labels, algVIRConfigOutput);
                algVIRConfigOutput_.algVIRConfigCoverStopLine = algVIRConfigOutput.algVIRConfigCoverStopLine;
            }
            //违反导向3
            if(AgainstDirection == algVIRConfigInput.currentEIllegalType)
            {
                processForAgainstDirection(labels, algVIRConfigOutput);
                algVIRConfigOutput_.algVIRConfigAgainstDirection = algVIRConfigOutput.algVIRConfigAgainstDirection;
            }
            //逆行4
            if(Retrograde == algVIRConfigInput.currentEIllegalType)
            {
                processForRetrograde(labels, algVIRConfigOutput);
                algVIRConfigOutput_.algVIRConfigRetrograde = algVIRConfigOutput.algVIRConfigRetrograde;
            }
            //压实线5
            if(CrossLine == algVIRConfigInput.currentEIllegalType)
            {
                processForCrossLine(labels, algVIRConfigOutput);
                algVIRConfigOutput_.algVIRConfigCrossLine = algVIRConfigOutput.algVIRConfigCrossLine;
            }
            //违法变道6
            if(IllegalLaneChange == algVIRConfigInput.currentEIllegalType)
            {
                processForIllegalLaneChange(labels, algVIRConfigOutput);
                algVIRConfigOutput_.algVIRConfigIllegalLaneChange = algVIRConfigOutput.algVIRConfigIllegalLaneChange;
            }
            //借道超车7
            if(AgainstInsert == algVIRConfigInput.currentEIllegalType)
            {
                processForAgainstInsert(labels, algVIRConfigOutput);
                algVIRConfigOutput_.algVIRConfigAgainstInsert = algVIRConfigOutput.algVIRConfigAgainstInsert;
            }
            //手持违停
            if(ViolationParking == algVIRConfigInput.currentEIllegalType)
            {
                processForViolationParking(labels, algVIRConfigOutput);
                algVIRConfigOutput_.algVIRConfigViolationParking = algVIRConfigOutput.algVIRConfigViolationParking;
            }
            //黄网格停车
            if(YellowGridParking == algVIRConfigInput.currentEIllegalType)
            {
                processForYellowGridParking(labels, algVIRConfigOutput);
                algVIRConfigOutput_.algVIRConfigYellowGridParking = algVIRConfigOutput.algVIRConfigYellowGridParking;
            }
            //占用公交车道
            if(AgainstBusLaneWithSign == algVIRConfigInput.currentEIllegalType)
            {
                processForAgainstBusLaneWithSign(labels, algVIRConfigOutput);
                algVIRConfigOutput_.algVIRConfigAgainstBusLaneWithSign = algVIRConfigOutput.algVIRConfigAgainstBusLaneWithSign;
            }
            //占用非机动车道
            if(AgainstBicycleLane == algVIRConfigInput.currentEIllegalType)
            {
                processForAgainstBicycleLane(labels, algVIRConfigOutput);
                algVIRConfigOutput_.algVIRConfigAgainstBicycleLane = algVIRConfigOutput.algVIRConfigAgainstBicycleLane;
            }
            //占用紧急车道
            if(AgainstEmergencyLane == algVIRConfigInput.currentEIllegalType)
            {
                processForAgainstEmergencyLane(labels, algVIRConfigOutput);
                algVIRConfigOutput_.algVIRConfigAgainstEmergencyLane = algVIRConfigOutput.algVIRConfigAgainstEmergencyLane;
            }
            //高速超速
            if(AgainstHighSpeed == algVIRConfigInput.currentEIllegalType)
            {
                processForAgainstAgainstHighSpeed(labels, algVIRConfigOutput);
                algVIRConfigOutput_.algVIRConfigAgainstHighSpeed = algVIRConfigOutput.algVIRConfigAgainstHighSpeed;
            }
            //礼让行人
            if(AgainstLetPedestrian == algVIRConfigInput.currentEIllegalType)
            {
                processForAgainstAgainstLetPedestrian(labels, algVIRConfigOutput);
                algVIRConfigOutput_.algVIRConfigAgainstLetPedestrian = algVIRConfigOutput.algVIRConfigAgainstLetPedestrian;
            }
            //主驾打电话
            if(AgainstCalling == algVIRConfigInput.currentEIllegalType)
            {
                processForAgainstAgainstCalling(labels, algVIRConfigOutput);
                algVIRConfigOutput_.algVIRConfigAgainstCalling = algVIRConfigOutput.algVIRConfigAgainstCalling;
            }
            //未系安全带
            if(AgainstNoBelt == algVIRConfigInput.currentEIllegalType)
            {
                processForAgainstNoBelt(labels, algVIRConfigOutput);
                algVIRConfigOutput_.algVIRConfigAgainstNoBelt = algVIRConfigOutput.algVIRConfigAgainstNoBelt;
            }
    

    正确运行。

  • 相关阅读:
    关于Xcode的一些方法-15-05-01
    iOS 多线程(NSThread、GCD、NSOperation)
    iOS中View的创建过程
    iOS启动原理及应用生命周期
    UITableView详解
    iOS 字典转模型
    strong和weak
    零碎知识点总结(不定时更新)
    iOS常用第三方类库 Xcode插件
    cocoapods 类库管理利器
  • 原文地址:https://www.cnblogs.com/rainsoul/p/10374253.html
Copyright © 2020-2023  润新知