2014-10-22 5 views
-1

У меня есть функция findId (Const QString & имя), который бросает мне ошибку во время coompilation:ошибка LNK2019: неразрешенный внешний символ :: FindWindow() функция

error LNK2019: unresolved external symbol [email protected] referenced in function "private: unsigned int__thiscall MainClass::findId(class QString const &)"([email protected]@@[email protected]@@Z)

mainclass.cpp:

WId MainClass::findId(const QString& name) 
{ 
    return (WId) ::FindWindow(NULL, (TCHAR*)name.utf16()); 
} 

Я не знаю, где проблема, потому что я использовал этот код раньше в моем другом проекте и там он работал. Может, я что-то пропустил.

+0

вы получите лучшие ответы, если вы повторно задать свой вопрос. Какой язык? Какая ОС? Какая технология? Какой компилятор? 'lnk2019' не является полезным тегом. –

+2

FindWindow требует Windows.h и User32.lib –

+2

Компонент не может найти определение ':: FindWindow (...)'. Вы уверены, что есть один? – CinCout

ответ

2

В обзоре решений у вас есть несколько вкладок. Одна из вкладок называется «Property Manager», откройте эту вкладку. На этой вкладке вы найдете свой проект и его конфигурации. В действительности это содержит Листы свойств, один из которых: «Основные библиотеки Windows». Если вы щелкните по нему правой кнопкой мыши и перейдите к Linker-> Input, вы найдете библиотеки Windows user32.lib и т. Д. Эти свойства наследуются вашим проектом через% (AdditionalDependencies).

Одна из этих вещей неправильно настроена в вашем текущем проекте.

+0

« Прагма-комментарий »лучше для этого случая ИМО. – cybermonkey

+0

По ошибке я удаленные% (AdditionalDependencies) при добавлении моих библиотек. Теперь это работает. –

2

Компоновщик пытается скомпилировать приложение, но не может, поскольку он не знает, что FindWindow относится, потому что вы не использовали user32 библиотеку, которая необходима для функции FindWindow. Приведенный ниже код исправит его.

 #prama comment(lib, "user32.lib")  
     WId MainClass::findId(const QString& name) 
     { 
      return (WId) ::FindWindow(NULL, (TCHAR*)name.utf16()); 
     } 

Это работает с кодом, который вы указали, и, вероятно, ему больше кода. Если это так, просто #pragma comment(lib, "user32.lib") после вашего блока #include, но перед любыми вашими функциями или namespace s.

В следующем примере из MSDN KB article on this issue будет гарантировать LNK2019 ошибку:

// LNK2019.cpp 
// LNK2019 expected 
extern char B[100]; // B is not available to the linker 
int main() { 
    B[0] = ' '; 
}