Неопределенная ссылка на локальный класс - PullRequest
0 голосов
/ 15 сентября 2010

Я только что поиграл с библиотекой qjson и получил ошибку "undefined reference". Это код:

#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 классе. Почему?

Ответы [ 2 ]

4 голосов
/ 15 сентября 2010

У вас есть только объявленные методы класса.Вам также необходимо определить (т.е. реализовать) их.На данный момент, как компилятор должен знать, что конструктор Person должен делать?

0 голосов
/ 15 сентября 2010

Вам нужно связать библиотеку или объектный файл, который реализует класс Person.

Если у вас есть файл libqjson.a в варианте Unix, вам нужно добавить -lqjson в вашу командную строку ссылки.Если вы используете Windows с qjson.lib, вам нужно связать с qjson.lib.Если у вас есть файл .cpp, который реализует Person, вам необходимо скомпилировать его и связать с исполняемым файлом.

...