Выбор ответа Junior Сборка и линковка спрашивают часто обновлено

Откуда undefined reference

Вопрос

Линковщик пишет undefined reference to Foo::bar(). Что из этого самая вероятная причина?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Синтаксическая ошибка в теле Foo::bar, из-за которой тело пропущено. Ошибка линковки означает, что компилятор видел объявление и сгенерировал вызов, но ни один объектный файл и ни одна библиотека не содержат определения: забыли .cpp в сборке, неправильный порядок библиотек, несовпадение сигнатуры объявления…

Варианты ответа

  1. Не подключён заголовок с объявлением Foo в файле, где вызывается bar
  2. Метод объявлен, но его определение не попало к линковщику
  3. Синтаксическая ошибка в теле Foo::bar, из-за которой тело пропущеноправильный ответ
  4. Переполнение стека при запуске из-за рекурсии в Foo::bar

Разбор

Ошибка линковки означает, что компилятор видел объявление и сгенерировал вызов, но ни один объектный файл и ни одна библиотека не содержат определения: забыли .cpp в сборке, неправильный порядок библиотек, несовпадение сигнатуры объявления и определения или шаблон, определённый в .cpp.

  • Без объявления была бы ошибка компиляции, а не линковки.
  • Синтаксические ошибки ловит компилятор.
  • До запуска дело не дошло.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.