Порядок следования инструкций в коде с переменными играет огромное значение. Переменная должна быть определена до того, как будет использована. Ниже пример ошибки, которую очень часто допускают новички:
std::cout << user_age;
int user_age { 18 };
Запуск программы выше завершается с ошибкой:
error: use of undeclared identifier 'user_age'
Ошибка error: use of undeclared identifier 'X' означает, что в коде используется переменная, которая не определена. Причем в самой ошибке прямо говорят какая: user_age
. Кроме неправильного порядка определения, в C++ встречаются банальные опечатки, причем как при использовании переменной, так и при ее объявлении.
Еще одна распространенная ошибка — попытаться объявить уже объявленную переменную:
int user_age { 18 };
int user_age { 18 };
Так делать нельзя. Придётся создать новую переменную.
Количество подобных ошибок уменьшается за счет использования правильно настроенного редактора. Такой редактор подсвечивает имена, которые используются без объявления, и предупреждает о возможных проблемах.
Иногда бывает ситуация когда одна переменная определена глобально, а другая локально и обе они имеют одинаковые имена:
int user_age { 20 }; // глобальная переменная
int main() {
int user_age { 18 }; // локальная переменная
std::cout << user_age;
}
В консоли будет вывод локальной user_age
:
18
Область видимости глобальной переменной весь файл, но мы не можем обратиться к ней внутри функции, так как ее перекрывает локальная переменная. Такие ошибки трудно уловимы и конечно переменным лучше придумать разные имена.
На самом деле мы можем обратиться к глобальной переменной используя оператор ::
. Мы уже работали с ним, обращаясь к пространству имён std::cout
.
int user_age { 20 };
int main() {
int user_age { 18 };
std::cout << ::user_age;
}
20
Если перед оператором ::
, это значит мы обращаемся к глобальному пространству имен. С пространством имен мы познакомимся дальше в курсе.
Найдите в программе необъявленную переменную и объявите ее, присвоив ей значение 27
;
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Ваше упражнение проверяется по этим тестам
1#include "test_helper.h"
2
3TEST_CASE("testing solution") {
4 std::string expected = "John is 27 years old\n";
5 std::string actual = get_output(sizeof(expected));
6
7 CHECK(actual == expected);
8}
9
Решение учителя откроется через: