내가 가지고있는 나는 GUI에서 사용자에게 값을 표시하기 위해 사용하고 내 코드의 경우-else 문 다음C++ 모두 '경우'와 '다른'문 호출을 한 것으로 나타났습니다
if (data.steering.fpTTGValid)
{
pFlightPlanTTGReadout->setValid();
pFlightPlanTTGReadout->update((int)data.steering.flightPlanTTG);
}
else
{
pFlightPlanTTGReadout->setInvalid();
}
을
디버그에서 프로그램을 실행하고 Visual Studio에서 프로세스에 연결할 때 커서가 'if'문에서 data.steering.fpTTGValid
변수 위로 커서를 이동하면 그 값이 참임을 알 수 있습니다. 내 이해는이 후속 {}
내부 코드를 실행해야하지만, else
문을 실행해서는 안됩니다.
그러나 코드를 단계별로 계속 진행하면 data.steering.flightPlanTTG
변수 값이 0으로 유지되어 전달되는 update()
함수가 실행되지 않았 음을 알 수 있습니다. 이 변수는 GUI에 표시된 0에도 그대로 있으며 if
문의 else
절이 호출되었음을 나타냅니다.
는 fpTTGValid
변수가 처음에 사실 때문에, 내 생각 엔 내가 실제로 GUI에 표시되는 값을 보지 못할 수 있도록 모두 if
과 else
절, called-되는 것을 때문에이 설정되어 표시 할 것 변수 0 setInvalid() 함수에 의해.
아무도 내가 여기서 잘못하고있는 것을 지적 할 수 있습니까? data.steering.fpTTGValid
값이 true인데도 update()
함수가 data.steering.flightPlanTTG
변수의 값을 업데이트하지 않는 이유는 무엇입니까?
update()
기능으로 정의됩니다
void ElapsedTimeReadout::update(const int total_seconds_)
{
SESL_FUNCTION_BEGIN(update)
int seconds, minutes, hours;
int update_delta = total_seconds_;
seconds = update_delta % 60;
update_delta = (update_delta - seconds)/60;
minutes = update_delta % 60;
update_delta = (update_delta - minutes)/60;
hours = update_delta % 24;
channel.Hours = hours;
channel.Minutes = minutes;
channel.Seconds = seconds;
SESL_FUNCTION_END()
}
당신은 단지 if를 평가 한 다음 else를 치는 것이 아니라고 확신합니까? 나는 그것이 주요한 버그를 대표 할 것이기 때문에 둘 다 의심되고있다. 당신의 진술에서 당신은 그것이 if로 들어가야한다고 생각하지만 실제로는 주로 논리 오류로 인한 else에 들어가고있는 것처럼 보입니다. – jgr208
간단한 테스트 : 디버그 문을 두 경로에 넣고 다른 텍스트를 출력합니다. 만약 당신이 두 문장을 얻었다면 반짝이는 페니를 먹을 것입니다 ... –
이'pFlightPlanTTGReadout-> update ((int) data.steering.flightPlanTTG);'* 매개 변수 * 값이 바뀔 것으로 예상하십니까? 캐스팅이 아닙니다. – crashmstr