Выбор ответа Junior Сборка и линковка спрашивают часто обновлено
Откуда undefined reference
Вопрос
Линковщик пишет undefined reference to Foo::bar(). Что из этого самая вероятная причина?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Синтаксическая ошибка в теле Foo::bar, из-за которой тело пропущено. Ошибка линковки означает, что компилятор видел объявление и сгенерировал вызов, но ни один объектный файл и ни одна библиотека не содержат определения: забыли .cpp в сборке, неправильный порядок библиотек, несовпадение сигнатуры объявления…
Варианты ответа
- Не подключён заголовок с объявлением
Fooв файле, где вызываетсяbar - Метод объявлен, но его определение не попало к линковщику
- Синтаксическая ошибка в теле
Foo::bar, из-за которой тело пропущеноправильный ответ - Переполнение стека при запуске из-за рекурсии в
Foo::bar
Разбор
Ошибка линковки означает, что компилятор видел объявление и сгенерировал вызов, но ни один объектный файл и ни одна библиотека не содержат определения: забыли .cpp в сборке, неправильный порядок библиотек, несовпадение сигнатуры объявления и определения или шаблон, определённый в .cpp.
- Без объявления была бы ошибка компиляции, а не линковки.
- Синтаксические ошибки ловит компилятор.
- До запуска дело не дошло.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Статическая или динамическая библиотека
Следующий вопрос
Какие файлы перекомпилировать после изменения заголовков