Why do I get linking errors issued from moc when building my project?

Errors like the following:

  1. Error 1 error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall myApp_qt::metaObject(void)const " (?metaObject@myApp@@UBEPBUQMetaObject@@XZ) myApp.obj myApp)

are typically issued by the moc [doc.qt.nokia.com] preprocessor and indicate that there is no moc-generated cpp file, or the moc-generated cpp-file is not compiled and linked into your project.

You can try regenerating the .vcproj file on the command line to see if this helps. This can have an effect in situations where the .vcproj file has not been updated with information about the moc file. Open the command prompt provided with Qt in the Start menu and you go to your project’s directory and type

  1. qmake -tp vc
  2. devenv yourProject.vcproj

to see if that helps.

The attached projects demonstrate the 2 possible ways of linking the moc generated code with your application. In the single main.cpp, the class declaration is in the .cpp file and we need to include the moc generated file into the application by adding the following line:

  1. #include "nameOfFile.moc"

In the .zip file, the class declaration is in the .h file and the moc output will then be put in a file called moc_myclass.cpp. This file should be compiled and linked as normal.

No comments

Write a comment

Sorry, you must be logged in to post a comment.