我有Qt Visual Studio加載項的Windows Qt庫4.8.1(VS 2010終極版)。這是我非常簡單的應用程序:建立qt解決方案時未解決的外部和一些警告
#include<qobject.h>
#include<qstring.h>
#include<memory>
class MyClass : public QObject{
Q_OBJECT
public:
MyClass(const QString &text, QObject *parent = 0) : m_text(text) {}
public slots:
void setText(const QString &text);
signals:
void textChanged(const QString&);
private:
QString m_text;
};
void MyClass::setText(const QString &text){
if(m_text == text) return;
m_text = text;
emit textChanged(m_text);
}
int main(int argc, char *argv[]){
std::shared_ptr<MyClass> a(new MyClass("foo"));
std::shared_ptr<MyClass> b(new MyClass("bar"));
QObject::connect(a.get(), SIGNAL(textChanged(const QString&)),
b.get(), SLOT(setText(const QString&)));
a->setText("changed");
}
錯誤,我得到有關解析的外部錯誤:6錯誤LNK2001: 解析的外部符號「市民:虛擬INT __thiscall MyClass的:: qt_metacall(枚舉QMetaObject ::呼叫,INT,無效*。*) 「 (qt_metacall @ MyClass的@@ UAEHW4Call @ QMetaObject @@ HPAPAX @ Z)
錯誤4錯誤LNK2001:無法解析的外部符號」 市民:虛擬 結構QMetaObject常量* __thiscall MyClass的:: metaObject(void)const「 (?metaObject @ MyClass @@ UBEPBUQMeta對象@@ XZ)
錯誤5錯誤LNK2001:無法解析的外部符號 「市民:虛擬 無效* __thiscall MyClass的:: qt_metacast(字符常量*)」? (qt_metacast @ MyClass的@@ UAEPAXPBD @ Z)
錯誤3錯誤LNK2019:無法解析的外部符號「protected:void __thiscall MyClass :: textChanged(class QString const &)」(?textChanged @ MyClass @@ IAEXABVQString @@@ Z)在函數 中引用「public:void __thiscall MyClass: :setText(class QString const &)「 (?setText @ MyClass @@ QAEXABVQString @@@ Z)
和兩個警告:
警告1個警告MSB8017:執行自定義生成項目 「GeneratedFiles \調試\ main.moc」 命令的循環依賴關係已經檢測 。這可能會導致增量構建到 工作不正確。
警告2警告: 'C:\ Users \ Anonymous \ documents \ visual studio 2010 \ Projects \ qtWorld \ qtWorld \ qtworld.qrc'中沒有資源。
我沒有使用任何qmake/nmake。當你獲得最新的Qt Visual Studio加載項1.1.11(甚至Intellisense識別關鍵字slots:
signals:
)時,它們不是必需的,對吧?
現在我的問題:
- 我聽到很多錯誤是由剛剛重建整體解決方案,這是爲什麼解決?
- 請解釋爲什麼我會深入瞭解這些錯誤及其可能的解決方案。
P.S請善於解釋,不要whorer
MOC應該創建實現了信號框TextChanged() – drescherjm 2012-08-14 10:56:54
所以這就是爲什麼該警告顯示出來。 – 2012-08-14 10:58:20
'textChanged'是信號,怎麼定義它? 。儘管我現在定義了構造函數,但仍然給出了相同的警告和錯誤。請再次閱讀我的問題請 – 2012-08-14 11:11:08