Я пытаюсь скомпилировать старый проект в 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, поэтому я надеюсь, что это нечто тривиальное.
Кто-нибудь видел эту конкретную ошибку?
Это не Unit1.obj, который он не может найти, то есть файл, ссылающийся на отсутствующий метод. Если бы я должен был догадаться, я бы предположил, что в исходном коде отсутствует определение для Button1Click в классе TMapperForm. Попробуйте открыть форму в дизайнере и дважды щелкнуть по Button1. Если обработчик OnClick определен, он приведет вас к нему в исходный код, и вы можете исправить ссылку, чтобы указать на этот метод. Если у него его нет, для вас будет создан заглушка метода Button1Click. –
@DavidDean большое спасибо. Был объект Button1, определенный в файле заголовка, в классе TMapperForm, который я пропустил. По-видимому, первоначальный разработчик начал что-то добавлять дополнительную кнопку, но никогда не использовал ее, а затем оставил определение в классе def. – laika
Это случается, когда вы сохраняете проект (или любой файл), а код вашего обработчика пуст. BCB оптимизирует его, но иногда оставляют вызов обработчика кнопок (особенно, если он был добавлен вручную). Также вам нужно быть осторожным с линиями rem, потому что, если вы удалите их и оптимизируйте функцию без них, это может быть выполнено 1 или две линии рядом с этой функцией делают беспорядок ... – Spektre