2012-02-14 60 views
3

OSX LionでQtCreatorを実行しています.Q_OBJECTマクロが必要なクラスを作成するたびに、アプリケーションをビルドしようとするとエラーが発生します。そのクラスのコードは以下の通りです。受信したエラーもそうです。何が起こっているかもしれないか何か手がかり?Q_OBJECTマクロが問題(Qt)を引き起こすのはなぜですか?

注:私はすでにqmakeを実行し、無駄に再構築を試みました。

#ifndef TASKLIST_H 
#define TASKLIST_H 

#include <QObject> 

class TaskList : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit TaskList(QObject *parent = 0); 

public slots: 
    void addTask(); 
    void displayTasks(); 
}; 

#endif // TASKLIST_H 

とエラー:

:-1: error: symbol(s) not found for architecture x86_64

:-1: error: collect2: ld returned 1 exit status

+0

それはヘッダーファイルで区切られていますか? –

+0

@DmitryKachkoええ、それは別のファイルにあります – finiteloop

+1

あなたの.proファイルにHEADERS + = tasklist.hがありますか? –

答えて

0

tasklist.hファイル

#ifndef TASKLIST_H 
    #define TASKLIST_H 

    #include <QObject> 

    class TaskList : public QObject 
    { 
     Q_OBJECT 
    public: 
     explicit TaskList(QObject *parent = 0); 

    public slots: 
     void addTask(){}; 
     void displayTasks(){}; 
    }; 

    #endif // TASKLIST_H 

tasklist.cpp

#include "tasklist.h" 

    TaskList::TaskList(QObject *parent) : 
     QObject(parent) 
    { 
    } 

main.cppに

まだQtの創造主にバグがあるようです3210
#include <QtCore/QCoreApplication> 
#include "tasklist.h" 


int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 
    TaskList t; 
    return a.exec(); 
} 

が正常に動作しますが、それは別のファイルに

+0

私には同じ問題がありました。どうすればセットアップしたのですか? – finiteloop

4

でなければなりません。

Q_OBJECTを持つクラスとQ_OBJECTを持たないクラスの数が多い大規模プロジェクトがあります。それはうまく動作します。しかし、Q_OBJECTを持っていないクラスにQ_OBJECTを追加すると、ビルドしようとすると、この "collect2:ldが1つの終了ステータスを返しました"というエラーが出ます。

ビルドディレクトリを確認すると、このクラスのmocファイルが見つからないことがわかります。 Qtはmocファイルを作成しません!しかし、プロジェクトからヘッダファイルとcppファイルを削除して再度追加すると、mocファイルが生成され、プロジェクトが正常に構築されます。

この問題は、Q_OBJECTを持たないクラスがあって、過去に正常に構築された場合にのみ発生するようです。 "Q_OBJECT"を追加する前にコンパイルされていなかったQ_OBJECTの新しいクラスは、常に正常に動作します。

この問題が起こると、あなたが(とQ_OBJECTをコメントアウトすると、正しく構築するプロジェクトをすることができます)すべてを正しく含ま確信しているのであれば、次の操作を行います

  • の.hと.cppのファイルを削除(ここで、Q_OBJECTを追加したばかりの場所)をプロジェクトから削除します。
  • プロジェクトに再度追加する
  • クリーンプロジェクト
  • もう一度ビルドしてください。 (/実行qmakeのをビルドする)Clean All続いqmakeを実行しているいくつかのケースでは

EDIT

で十分です。

+0

私はこの正確な問題を抱え、 'Q_PROPERTY'を宣言して再構築しました。 'Q_PROPERTY'は構文上正しいものではありませんでした。奇妙な – Cobalt

関連する問題