2015-08-20 3 views
0

Я пытаюсь скомпилировать старый проект в Borland C++ Builder 4. У меня есть рабочий exe и исходные файлы для этого, поэтому кто-то должен был скомпилировать его раньше. Тем не менее, когда я открываю проект, проверьте, содержит ли проект hs все необходимые файлы в ресурсах и пытается его скомпилировать, я продолжаю получать следующую ошибку компоновщика:Borland C++ Builder 4 [Ошибка компоновщика] Неразрешенный внешний

[Ошибка компоновщика] Неразрешенный внешний '_fastcall TMapperForm :: Button1Click (System :: TObject *) 'ссылается на ... \ Unit1.obj

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

Я просмотрел ответы, предоставленные здесь для аналогичных ошибок компоновщика, но ни одно из них не показалось мне полезным. Я уже пробовал следующее:

  • Добавление файла .obj в ресурсы проекта.
  • Попытка добавления прагма-линий вручную, таких как #pragma link (Unit1.obj)
  • Убедитесь, что в проекте> Параметры> Каталоги были выбраны правильные пути Include и Library.
  • Проверка наличия всех пакетов.

Ничего из этого не работает. Я довольно новичок в C++ и C++ Builder, поэтому я надеюсь, что это нечто тривиальное.

Кто-нибудь видел эту конкретную ошибку?

+1

Это не Unit1.obj, который он не может найти, то есть файл, ссылающийся на отсутствующий метод. Если бы я должен был догадаться, я бы предположил, что в исходном коде отсутствует определение для Button1Click в классе TMapperForm. Попробуйте открыть форму в дизайнере и дважды щелкнуть по Button1. Если обработчик OnClick определен, он приведет вас к нему в исходный код, и вы можете исправить ссылку, чтобы указать на этот метод. Если у него его нет, для вас будет создан заглушка метода Button1Click. –

+0

@DavidDean большое спасибо. Был объект Button1, определенный в файле заголовка, в классе TMapperForm, который я пропустил. По-видимому, первоначальный разработчик начал что-то добавлять дополнительную кнопку, но никогда не использовал ее, а затем оставил определение в классе def. – laika

+0

Это случается, когда вы сохраняете проект (или любой файл), а код вашего обработчика пуст. BCB оптимизирует его, но иногда оставляют вызов обработчика кнопок (особенно, если он был добавлен вручную). Также вам нужно быть осторожным с линиями rem, потому что, если вы удалите их и оптимизируйте функцию без них, это может быть выполнено 1 или две линии рядом с этой функцией делают беспорядок ... – Spektre

ответ

0

Ошибка была вызвана отсутствующим обработчиком или, точнее, обработчиком, не содержащим ничего.

В то время как обработчик кнопки не содержал ничего, класс TMapperForm по-прежнему включал определения для дополнительной кнопки с именем Button1, но не использовался. Комментирование метода и объявления в классе TMapperForm (в файле заголовка для Unit1) вместе с обработчиком в файле C++ разрешило проблему.

 Смежные вопросы

  • Нет связанных вопросов^_^