referencia indefinida a una clase local
Pregunta
He mejor jugador, con la biblioteca qjson y ha obtenido un error "referencia indefinida". Este es el código:
#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;
}
Por lo tanto, el compilador dice que undefined reference to Person::Person
y todas las demás funciones en persona clase. ¿Por qué?
Solución
sólo tiene declarada los métodos de la clase. También es necesario definir (es decir implemento) ellos. Por el momento, ¿cómo debería el compilador saber el constructor de Person
se supone que debe hacer?
Otros consejos
necesidad de vincular con la biblioteca o un objeto archivo que implementa la clase Person.
Si usted tiene un archivo libqjson.a en una variante de Unix, es necesario añadir -lqjson a la línea de comando de enlace. Si estás en Windows con qjson.lib, es necesario vínculo con qjson.lib. Si usted tiene un archivo .cpp que implementa persona, que necesita para su recopilación y la vinculan con su ejecutable.