c – QObject:缺少vtable链接错误

前端之家收集整理的这篇文章主要介绍了c – QObject:缺少vtable链接错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道这个问题已被问过很多次,但我在这里找不到解决方案,也没有在谷歌找到解决方案.

这是我的头文件

  1. #ifndef MAINCONTROLLER_H
  2. #define MAINCONTROLLER_H
  3.  
  4. #include <QSettings>
  5. #include <QDebug>
  6. #include <QDir>
  7. #include <QObject>
  8.  
  9. #include "PhTools/PhString.h"
  10. #include "PhStrip/PhStripDoc.h"
  11.  
  12. class MainController : public QObject
  13. {
  14. Q_OBJECT
  15.  
  16. public:
  17. explicit MainController(QObject *parent = 0);
  18. void loadSettings();
  19. PhString getLastFile();
  20. void setLastFile(PhString fileName);
  21. bool openDoc(PhString fileName);
  22.  
  23. signals:
  24. void docChanged();
  25.  
  26. private:
  27. QSettings * _settings;
  28. PhStripDoc * _doc;
  29.  
  30. };
  31.  
  32. #endif // MAINCONTROLLER_H

我的CPP档案:

  1. #include "MainController.h"
  2.  
  3.  
  4. MainController::MainController(QObject *parent) :
  5. QObject(parent)
  6. {
  7. _doc = new PhStripDoc();
  8. loadSettings();
  9. }
  10. void MainController::loadSettings()
  11. {
  12. _settings = new QSettings(QDir::homePath() + "/Library/Preferences/com.me.me.plist",QSettings::NativeFormat);
  13.  
  14. getLastFile();
  15. }
  16.  
  17. PhString MainController::getLastFile()
  18. {
  19. qDebug() << "lastfile :" << _settings->value("last_file","").toString();
  20. return _settings->value("last_file").toString();
  21. }
  22.  
  23. bool MainController::openDoc(PhString fileName)
  24. {
  25. bool succeed = _doc->openDX(fileName);
  26. if (succeed)
  27. emit docChanged();
  28. return succeed;
  29. }
  30.  
  31. void MainController::setLastFile(PhString filename)
  32. {
  33. _settings->setValue("last_file",filename);
  34. }

这是错误日志:

  1. Undefined symbols for architecture x86_64:
  2. "MainController::docChanged()",referenced from:
  3. MainController::openDoc(QString) in MainController.o
  4. "vtable for MainController",referenced from:
  5. MainController::MainController(QObject*) in MainController.o
  6. MainController::MainController(QObject*) in MainController.o
  7. NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  8. ld: symbol(s) not found for architecture x86_64
  9. clang: error: linker command Failed with exit code 1 (use -v to see invocation)

它可能来自信号,但我不确定……

解决方法

您需要在源文件的末尾包含此行:

#include“MainController.moc”

或者,您也可以使用您的构建系统来处理这个问题,但这可能更容易.

猜你在找的C&C++相关文章