سؤال

لقد لعبت للتو مع مكتبة 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;
}

لذلك ، يقول المترجم undefined reference to Person::Person وجميع الوظائف الأخرى في شخص صف دراسي. لماذا ا؟

هل كانت مفيدة؟

المحلول

لديك فقط أعلن طرق الفصل. تحتاج أيضا إلى حدد (أي تنفيذ) لهم. في الوقت الحالي ، كيف ينبغي للمترجم معرفة مُنشئ Person من المفترض أن تفعل؟

نصائح أخرى

تحتاج إلى الارتباط بالمكتبة أو ملف الكائن الذي ينفذ شخص الفئة.

إذا كان لديك ملف libqjson.a على متغير UNIX ، فأنت بحاجة إلى إضافة -LQJSON إلى سطر أوامر الارتباط الخاص بك. إذا كنت على Windows مع QJSON.LIB ، فأنت بحاجة إلى الارتباط مع QJSON.LIB. إذا كان لديك ملف .cpp يقوم بتنفيذ الشخص ، فأنت بحاجة إلى تجميعه وربطه باستخدام قابلة للتنفيذ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top