Ошибка was not declared in this scope
Компилятор встретил имя, которого не знает в этом месте программы. В Visual Studio та же ошибка называется C2065: undeclared identifier (для функций — C3861: identifier not found).
Как исправить
Посмотрите, какое имя указано в кавычках: из стандартной библиотеки (cout, vector, sort…), ваша переменная или ваша функция.
Имя из стандартной библиотекиcout, vector, sort…
Не подключён заголовок
| Имя в ошибке | Нужен #include |
|---|---|
cout, cin, endl | <iostream> |
string, getline, stoi, to_string | <string> |
vector | <vector> |
sort, reverse, max_element, min_element | <algorithm> |
sqrt, pow, fabs | <cmath> |
setprecision, fixed | <iomanip> |
map, set | <map>, <set> |
Свежие версии g++ для многих имён подсказывают сами: note: 'std::cout' is defined in header '<iostream>'; did you forget to '#include <iostream>'?.
Нет std:: и нет using namespace std
cout без std:: и без строки using namespace std; компилятор не найдёт. g++ подскажет: did you mean 'std::cout'?. Добавьте std:: или строку using namespace std; после #include (что она значит — в справке using namespace std — что это).
Опечатка
C++ различает большие и маленькие буквы: Cout, Vector, String, Main — это другие имена.
Своя переменнаяопечатка или вне блока
Опечатка в имени
Проверьте само имя переменной: объявлена count, а используется cout или cnt. Большие и маленькие буквы различаются: Sum и sum — разные имена.
Переменная за пределами своего блока
Переменная живёт только внутри фигурных скобок { }, где её объявили, а счётчик цикла — только внутри цикла:
for (int i = 0; i < n; i++) {
int square = i * i;
}
cout << i << square; // ошибка: ни i, ни square здесь уже нетЕсли значение нужно после блока, объявите переменную до него:
#include <iostream>
using namespace std;
int main() {
int n = 5;
int last = 0;
for (int i = 0; i < n; i++) {
last = i * i;
}
cout << last << "\n";
return 0;
}16То же с if: переменная, объявленная внутри if { ... }, после закрывающей скобки недоступна.
Своя функциянаписана ниже места вызова
Компилятор читает файл сверху вниз. Если main вызывает solve(), а solve написана ниже main, в момент вызова она ещё неизвестна. Перенесите функцию выше main или поставьте выше её объявление:
#include <iostream>
using namespace std;
int solve(int x); // объявление: функция будет ниже
int main() {
cout << solve(4) << "\n";
return 0;
}
int solve(int x) {
return x * 10;
}40Если функция уже стоит выше, сверьте имя в вызове и в объявлении: Solve и solve — разные имена.
Совет
Исправляйте ошибки сверху вниз по одной и собирайте заново. Одна пропущенная скобка или #include может породить десятки сообщений ниже, и они исчезнут вместе с первой ошибкой.