Ошибка Unresolved reference
Unresolved reference значит «компилятор не нашёл такого имени»: переменной, функции, класса или свойства. После слов Unresolved reference в сообщении стоит само имя, а рядом — файл и номер строки. В IntelliJ IDEA и Android Studio такое имя подсвечено красным ещё до сборки.
Причины по порядку проверки
Проверяйте по очереди, пока имя не перестанет подсвечиваться красным. В Android Studio загляните ещё в раздел В Android Studio.
Опечатка
printnвместоprintln,lenghtвместоlength. Сравните имя в сообщении с тем, что хотели написать. Подсказки редактора (Ctrl+Пробел) помогают не ошибаться.Имя исправлено, и красная подсветка пропала — причина была в опечатке.
Большие и маленькие буквы
Kotlin их различает:
Println,stringилиreadLN— это уже другие имена. Правильно:println,String,readln.Имя написано теми же буквами, что в Kotlin, — ошибка ушла.
Забытый import
Часть функций и классов нужно подключить строкой в начале файла:
Kotlin import kotlin.math.sqrt import kotlin.random.Random fun main() { println(sqrt(16.0)) println(Random.nextInt(1, 2)) }Вывод 4.0 1Random.nextInt(1, 2)— число от 1 до 1, поэтому вывод всегда один и тот же. Без строкimportкомпилятор не знаетsqrtиRandom. В IntelliJ IDEA курсор на красном имени иAlt+Enterпредлагают подключить нужное (выбирайтеkotlin.…, а не похожие классы Java, если не уверены).Что import sqrt,abs,pow,roundToInt,PIkotlin.math.…Randomkotlin.random.RandomLocalejava.util.LocaleFilejava.io.Fileprintln,readln,listOf,mutableListOfи большинство функций строк и списков подключены всегда.После строки
importимя больше не подсвечено красным.Переменная вне своего блока
Переменная, объявленная внутри
{ }— вif, цикле, функции, — снаружи не видна:Kotlin fun main() { val n = 5 if (n > 0) { val message = "positive" } println(message) }Последняя строка не соберётся:
messageживёт только внутриif. Объявите переменную до блока или используйтеifкак выражение:val message = if (n > 0) "positive" else "not positive".Переменная объявлена там, где её видно, —
println(message)собирается.Не помогло — дальше: «У этого типа нет такой функции или свойства»
У этого типа нет такой функции или свойства
listOf(3, 1).sort()— у списка только для чтения нетsort();val n = 5иn.length— у числа нет длины, она есть у строки. Проверьте тип переменной: в IntelliJ IDEA он виден при наведении мыши на имя.Вызвана функция, которая есть у этого типа, — ошибка ушла.
Функция объявлена в другом месте
Функция внутри другой функции видна только в ней; функция из другого пакета (
packageв начале файла) требуетimport.Функция вызывается там, где она видна, или подключена через
import, — ошибка ушла.
В Android Studio
- После добавления библиотеки в
build.gradle.ktsнажмите Sync Now на появившейся полосе — пока проект не синхронизирован, классы библиотеки не находятся. - Красным подсвечены
Rили ресурсы — обычно ошибка в файле ресурсов (XML) или в имени ресурса; исправьте её и пересоберите проект (Build | Rebuild Project). - Если всё верно, а красное не уходит, помогает File | Invalidate Caches с перезапуском среды.
В Java похожая ошибка называется cannot find symbol — причины те же.