Ошибки компоновщика LNK1120 и LNK2001

#c #visual-c #linker-errors #visual-c -2005

#c #visual-c #ошибки компоновщика #visual-c -2005

Вопрос:

Я ненавижу эти ошибки компоновщика, есть идеи, как я могу от них избавиться?

 Error   2   fatal error LNK1120: 1 unresolved externals C:Users**********DocumentsVisual Studio 2005ProjectsMachine2DebugMachine2.exe
  

и

 Error   1   error LNK2001: unresolved external symbol "public: void __thiscall SecondDlg::OnBnClickedButton4(void)" (?OnBnClickedButton4@SecondDlg@@QAEXXZ) SecondDlg.obj
  

Комментарии:

1. Кстати, это ошибки компоновщика, а не компилятора.

Ответ №1:

Ошибка, вероятно, вызвана одной из следующих причин:

  • Вы забыли реализовать метод в cpp файле
  • cpp Файл не включен в компиляцию
  • Вы забыли экспортировать свой класс с _declspec(dllexport)
  • Вы не ссылаетесь на библиотеку, в которой SecondDlg находится

Ответ №2:

общедоступный: недействительный __этот вызов SecondDlg::OnBnClickedButton4(недействительный)

Компоновщик пытается изо всех сил сообщить вам, что вызов SecondDlg::OnBnClickedButton4(void) не может быть разрешен. Это означает, что он не может найти определение функции-члена из любого исходного файла (точнее, объектного файла), который был скомпилирован. Вы только что предоставили объявление в интерфейсе, но не его определение (т. Е. реализацию) где бы то ни было.

Ответ №3:

Ну, у меня не так много информации, чтобы понять, что происходит. Вы уверены, что написали метод OnBnClickedButton4? Возможно, это просто объявлено. Загляните в свои файлы C .

Можете ли вы показать нам объявление метода? Можете ли вы предоставить нам больше информации?

Может быть, вы используете ключевое слово «extern», когда оно не требуется?

Ответ №4:

Я удалил ON_BN_CLICKED(IDC_BUTTON4, amp;SecondDlg::OnBnClickedButton4) и все другие экземпляры IDC_BUTTON4. Мой компилятор пытался скомпилировать что-то, чего там больше не было.

Ответ №5:

Это помогло бы другим, кто читает эти вопросы и ответы, даже несмотря на то, что эта конкретная проблема была решена.

У меня были эти ошибки компоновщика раньше, и устранение использования глобальной переменной в целом, казалось, было ответом. Использование неконстантных глобальных переменных только сбивает с толку компилятор и компоновщик (и программиста), особенно по мере увеличения размера вашей программы.