我知道这个问题已被问过很多次,但我在这里找不到解决方案,也没有在谷歌找到解决方案.
这是我的头文件
#ifndef MAINCONTROLLER_H #define MAINCONTROLLER_H #include <QSettings> #include <QDebug> #include <QDir> #include <QObject> #include "PhTools/PhString.h" #include "PhStrip/PhStripDoc.h" class MainController : public QObject { Q_OBJECT public: explicit MainController(QObject *parent = 0); void loadSettings(); PhString getLastFile(); void setLastFile(PhString fileName); bool openDoc(PhString fileName); signals: void docChanged(); private: QSettings * _settings; PhStripDoc * _doc; }; #endif // MAINCONTROLLER_H
我的CPP档案:
#include "MainController.h" MainController::MainController(QObject *parent) : QObject(parent) { _doc = new PhStripDoc(); loadSettings(); } void MainController::loadSettings() { _settings = new QSettings(QDir::homePath() + "/Library/Preferences/com.me.me.plist",QSettings::NativeFormat); getLastFile(); } PhString MainController::getLastFile() { qDebug() << "lastfile :" << _settings->value("last_file","").toString(); return _settings->value("last_file").toString(); } bool MainController::openDoc(PhString fileName) { bool succeed = _doc->openDX(fileName); if (succeed) emit docChanged(); return succeed; } void MainController::setLastFile(PhString filename) { _settings->setValue("last_file",filename); }
这是错误日志:
Undefined symbols for architecture x86_64: "MainController::docChanged()",referenced from: MainController::openDoc(QString) in MainController.o "vtable for MainController",referenced from: MainController::MainController(QObject*) in MainController.o MainController::MainController(QObject*) in MainController.o NOTE: a missing vtable usually means the first non-inline virtual member function has no definition. ld: symbol(s) not found for architecture x86_64 clang: error: linker command Failed with exit code 1 (use -v to see invocation)
它可能来自信号,但我不确定……