Весь код моего кода слишком много, чтобы публиковать его здесь, поэтому я постараюсь показать суть.C/C++ объявленная и определенная переменная превращается в невидимую
Я кодирую простые графически представленные аналоговые часы (12 часов с тремя руками). В настоящее время мой код работает, если я позволяю часам работать от значения по умолчанию, т.е. все руки начинаются с 12. Однако я добавил функцию, которая позволяет редактировать показанное время и присущее этому независимо от начальной позиции руки, когда она попадает 12, более крупная соответствующая рука должна затем указывать один раз. Мой код ниже.
for (psi = 0; psi<6.28318530718-0.5236; psi+=0.5235987756) {
float xply = sin(psi);
float yply = cos(psi);
int hhx = x0 + (circleRad-100)*xply;
int hhy = y0 - (circleRad-100)*yply;
float phi;
for (phi = 0; phi<6.28318530718-0.10472; phi+=0.1047197551) {
float Multx = sin(phi);
float Multy = cos(phi);
int mhx = x0 + (circleRad-50)*Multx;
int mhy = y0 - (circleRad-50)*Multy;
float theta;
for (theta= 0; theta<6.28318530718-0.104720; theta+=0.1047197551) {
// If seconds are given then the if condition is tested
if (secPhase > 0) {
float angle = theta+secPhase;
// If second hand reach top, for loop breaks and enters a new loop for next minute, secphase is erased as new minute start from 0 secs.
if (angle > 6.28318530718-0.104720) {
plotHands(angle, x0, y0, circleRad, a, mhx, mhy, hhx, hhy, bytes);
capture.replaceOverlay(true, (const unsigned char*)a);
sleep(1);
secPhase = 0;
break;
}
// if second hand has not reached top yet, then plotting continues
plotHands(angle, x0, y0, circleRad, a, mhx, mhy, hhx, hhy, bytes);
capture.replaceOverlay(true, (const unsigned char*)a);
sleep(1);
}
// if there were no seconds given, plotting begins at 12.
else {
plotHands(theta, x0, y0, circleRad, a, mhx, mhy, hhx, hhy, bytes);
capture.replaceOverlay(true, (const unsigned char*)a);
sleep(1);
}
}
}
}
В настоящее время мой код работает в течение нескольких секунд. Есть объявленные и определенные значения, которые я здесь не включил, что я могу изменить, что изменит начальную позицию каждой руки, и где бы она ни находилась, когда она достигает 12 минут, она будет отмечать один раз.
В этом проблема. Логично, что я мог бы применить ту же концепцию, что и для секундной стрелки, но перенести ее на минутную стрелку и изменить соответствующие имена переменных, чтобы, когда минутная стрелка наносит 12, часовой стрелок будет двигаться. Это код, который нарушает:
for (phi = 0; phi<6.28318530718-0.10472; phi+=0.1047197551) {
if (minPhase > 0) {
float minAngle = phi + minPhase;
if (minAngle > 6.28318530718-0.10472) {
minPhase = 0;
break;
}
float Multx = sin(minAngle);
float Multy = cos(minAngle);
int mhx = x0 + (circleRad-50)*Multx;
int mhy = y0 - (circleRad-50)*Multy;
}
else {
float Multx = sin(phi);
float Multy = cos(phi);
int mhx = x0 + (circleRad-50)*Multx;
int mhy = y0 - (circleRad-50)*Multy;
}
}
Я взял только среднюю петлю с участием минутной стрелки. Эти циклы и утверждения гарантируют, что если нет заданной начальной точки минутной стрелки, будет выполняться инструкция else, но если есть начальная точка, стартовая точка будет галочкой до тех пор, пока она не ударит двенадцать, и которая указывает, что она ломается до часа для цикл, галочки один раз, очищая начальную точку минутной стрелки, чтобы начать заново в новый час.
Однако, как только я пытаюсь скомпилировать код, компилятор говорит мне:
ошибку: «MHX» не был объявлен в этой области
ошибка: «mhy» был не объявлен в этой области
он показывает это каждый раз, когда эта переменная вызывается в функции для рисования минутных стрелок и выглядит так, как если бы эти переменные просто исчезли. Они явно были объявлены и определены в моем коде, когда они были вызваны в цикле for ниже, он утверждает, что эти переменные отсутствуют.
Я также обнаружил, что если я удалил оператор 'else', код был скомпилирован и запущен, но был сломан, т. Е. Минутная стрелка не была в предполагаемой позиции.
Может ли кто-нибудь просветить меня, пожалуйста? Я все еще очень новичок в C и C++.
Спасибо заранее.
Они выходят за пределы видимости в закрывающей скобке блока. – chris