0

qjsonライブラリで遊んだところ、「未定義の参照」エラーが発生しました。これはコードです:

#include <qjson/qobjecthelper.h>
#include <qjson/serializer.h>

class Person: public QObject {

    Q_OBJECT

    Q_PROPERTY(QString name READ name WRITE setName)
    Q_PROPERTY(Gender gender READ gender WRITE setGender)
    Q_ENUMS(Gender)

public:
    Person(QObject *parent = 0);
    ~Person();

    QString name() const;
    void setName(const QString &name);

    enum Gender{Male, Female};
    Gender gender() const;
    void setGender(Gender gender);

private:
    QString m_name;
    Gender m_gender;

};

int main ()
{

    Person person;

    QJson::Serializer serializer;

    person.setName("Nick");
    person.setGender(Person::Male);
    QVariantMap person_map = QJson::QObjectHelper::qobject2qvariant(&person);

    QByteArray json = serializer.serialize(person_map);
    return 0;
}

したがって、コンパイラはそれとPersonクラスundefined reference to Person::Personの他のすべての関数を言います。なんで?

4

2 に答える 2

4

クラスのメソッドのみを宣言しました。また、それらを定義(つまり実装)する必要があります。現時点では、コンパイラはのコンストラクタがPerson実行することになっていることをどのように知る必要がありますか?

于 2010-09-15T13:06:51.767 に答える
0

Personクラスを実装するライブラリまたはオブジェクトファイルにリンクする必要があります。

Unixバリアントにlibqjson.aファイルがある場合は、リンクコマンドラインに-lqjsonを追加する必要があります。qjson.libを使用してWindowsを使用している場合は、qjson.libにリンクする必要があります。Personを実装する.cppファイルがある場合は、それをコンパイルして実行可能ファイルにリンクする必要があります。

于 2010-09-15T13:09:00.720 に答える