qt signal non défini erreur de référence
J'ai une classe de serveur pour lequel j'ai créé un signal rejoint(QString nom). Je l'appelle dans un appel de fonction join(QString nom), mais j'obtiens le message d'erreur
Serveur.o: Dans la fonction
Server::join(QString)':
Serveur::joint(QString)' collect2: ld a retourné 1 code de sortie
Server.cpp:(.text+0x48): undefined reference to
C'est ce que mon fichier d'en-tête ressemble:
#ifndef SERVER_H
#define SERVER_H
#include <QString>
#include <mqueue.h>
#include <QVector>
#include <QStringList>
#include "../src/messages.h"
class Server
{
public:
Server();
void start();
private:
void join(QString name);
char buf[MSG_SIZE], msgSend[MSG_SIZE];
QVector<mqd_t> mq_external;
QVector<QString> users;
mqd_t mq_central;
struct mq_attr attr;
signals:
void joined(QString name);
};
#endif //SERVER_H
et c'est mon fichier cpp:
#include "Server.h"
using namespace std;
Server::Server()
{
}
void Server::start(){
attr.mq_maxmsg = 100;
attr.mq_msgsize = MSG_SIZE;
attr.mq_flags = 0;
mq_unlink(CENTRALBOX);
mq_central = mq_open(CENTRALBOX, O_RDONLY | O_CREAT, S_IRWXU, &attr);
while(1)
{
int tempMsgVal = mq_receive(mq_central, buf, MSG_SIZE, 0);
if(tempMsgVal != -1){
QString tempS = buf;
QStringList tempSL = tempS.split(":");
if(tempSL.size() == 2 && tempSL.at(0) == "started")
{
int x = 0;
bool exists = false;
for(int i = 0; i < mq_external.size(); i++)
{
x = QString::compare(tempSL[1], users.at(i), Qt::CaseInsensitive);
if(x == 0)
{
exists = true;
break;
}
}
if(!exists)
{
sprintf(buf,"joined");
QString tempS1 = tempSL[1] + "new";
QByteArray byteArray = tempS1.toUtf8();
const char* tempr = byteArray.constData();
mqd_t tempMQ = mq_open(tempr, O_RDWR);
int tempI = mq_send(tempMQ, buf, strlen(buf), 0);
}
else
{
sprintf(buf,"invalidname");
QString tempS1 = tempSL[1] + "new";
QByteArray byteArray = tempS1.toUtf8();
const char* tempr = byteArray.constData();
mqd_t tempMQ = mq_open(tempr, O_RDWR);
int tempI = mq_send(tempMQ, buf, strlen(buf), 0);
}//Endelse
}//Endif
}//Endif
}//Endwhile
}
void Server::join(QString name)
{
emit joined(name);
}
OriginalL'auteur Amre | 2012-11-16
Vous devez vous connecter pour publier un commentaire.
Au début de votre déclaration de classe, vous devriez avoir la macro
Q_OBJECT
et assurez-vous d'hériter de certainsQObject
descendant.Je l'ai fait, mais cette fois j'obtiens une erreur supplémentaire "undefined reference to vtable for server" Le début de ma classe ressemble maintenant à ceci: la classe Serveur : public QObject { macro q_object public: . . . } J'ai même nettoyer le projet et a fait un tout reconstruire.
Exécuter "make distclean", et puis "qmake" de nouveau. Cela va reconstruire votre Makefiles, de sorte que le moc règles sont à jour. Un "make clean" n'est pas suffisant dans ce cas.
ok, cela a fonctionné. Merci les gars.
pour ceux qui ont lu sur ce qui ne l'utilisez pas faire, il pourrait être utile d'une note à aller dans votre répertoire de construction et de supprimer tous les fichiers, surtout si vous utilisez un IDE comme qt creator parce que vous pouvez nettoyer et reconstruire à votre contenu de coeurs mais si vous ne vous y allez, et de supprimer ces fichiers, vous ne serez jamais se débarrasser de la vtable erreur.
OriginalL'auteur Arnold Spence
En dehors de ce qui est mentionné dans cette réponse, aussi assurez-vous d'exécuter
qmake
. c'est à dire:Qui devrait corriger ces erreurs.
OriginalL'auteur iammilind