Compilation : edition de liens [Résolu]

Signaler
Messages postés
5
Date d'inscription
mercredi 23 juillet 2008
Statut
Membre
Dernière intervention
17 juin 2010
-
Messages postés
5
Date d'inscription
mercredi 23 juillet 2008
Statut
Membre
Dernière intervention
17 juin 2010
-
Bonjour à tous,

Je travaille avec Qt et me suis fait un petit widget permettant la saisie d'une clé d'enregistrement.

Etant donné que le code doit être propriétaire (je suis en stage), j'ai utilisé l'héritage pour définir un enfant de QLineEdit qui limite le nombre de caractères saisis et passe automatiquement au champ suivant.

Je mets le tout dans un qwidget légèrement modifié pour la navigation dans les champs.

Le problème vient de la compilation : une fameuse

qserialwidget.h:13: ISO C++ forbids declaration of 'QSerialEdit' with no type
qserialwidget.h:13: error: expected ';' before '*' token

Le tout suivi de quelques erreurs qui en découlent.
Cette erreur est la meme que je compile sous windows (XP) ou linux (ZenWalk 6.2).

Un p'tit bout de code pour comprendre :

qserialwidget.h
#ifndef QSERIALWIDGET_H
#define QSERIALWIDGET_H

#include <QWidget>

#include "ui_serialwidget.h"
#include "qserialedit.h"


class QSerialWidget : public QWidget,private Ui::QSerialWidget
{
    Q_OBJECT
    QSerialEdit * first;//premier champ

public:
    QSerialWidget(QWidget * parent=0,int sl=4,int cl=5,int parenth=0,int parentw=0);
};

#endif // QSERIALWIDGET_H



qserialedit.h
#ifndef QSERIALEDIT_H
#define QSERIALEDIT_H

#include <QLineEdit>
#include <QWidget>
#include <QKeyEvent>

class QSerialEdit : public QLineEdit
{
    Q_OBJECT
    int charlength;//nb max de caractères dans le champ
    QSerialEdit* next;//champ suivant
protected:
    void keyPressEvent ( QKeyEvent *);
public:
    QSerialEdit(QWidget * parent=0,int cl=5);
    QSerialEdit(QWidget * parent=0);
    QSerialEdit(const QSerialEdit &);
    void addNext(QSerialEdit *);
};

#endif // QSERIALEDIT_H


Je précise que je suis sur que c'est l'édition de liens qui foirent puisque en faisant quelques modifications qui n'entrainent pas cette erreur de compilation puis en revenant à cette version sans "make clean", ca compile sans problème.

Mais bon ce serait mieux de pouvoir compiler proprement

P.S : si vous voyez quelques autres grossières erreurs qui trainent, merci de me les faire remarquer

5 réponses

Messages postés
5
Date d'inscription
mercredi 23 juillet 2008
Statut
Membre
Dernière intervention
17 juin 2010

J'ai finalement trouvé :

Cela venait du fichier "ui_serialwidget.h"

A l'intérieur, il restait un dernier QLineEdit de mon implémentation précédente : ce QLineEdit s'appelait QSerialEdit...

Voila, un coup de génie qui passait comme ca ^^

donc méfiez-vous de Qt Designer, il est fourbe des fois ^^

@dragonjoker : Ni QSerialEdit, ni QSerialWidget ne font partie d'un namespace. Même si c'est vrai que le parent de Widget fait partie du namespace Ui.
Messages postés
14780
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
4 août 2020
92
Hello,
Si tu rajoutes ceci:
class QSerialEdit;
avant la déclaration de ta classe dans le fichier QSerialWidget.h?

class QSerialWidget : public QWidget,private Ui::QSerialWidget

N'est-il pas dangereux d'utiliser le même nom pour ta classe?

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
5
Date d'inscription
mercredi 23 juillet 2008
Statut
Membre
Dernière intervention
17 juin 2010

Rien ne change avec la déclaration, ce qui me semble logique : il n'y pas d'utilisation récursive. (j'avais deja cherché un peu sur le net avant de poster et tester cette solution).

Pour le meme nom de classe : étant donné que ce n'est pas le meme namespace, ca ne devrait pas poser de problème (d'ailleurs c'est juste un renommage, la classe parente s'appelle Ui_QSerialWidget).

Cela ne pourrait-il pas venir des include dans les cpp (ou plutot du manque d'include : je mets juste les headers correspondant) ?
Messages postés
5
Date d'inscription
mercredi 23 juillet 2008
Statut
Membre
Dernière intervention
17 juin 2010

Up Up Up !!!

Je n'ai toujours pas trouvé pourquoi. Si quelqu'un peut m'aider ?
Messages postés
92
Date d'inscription
samedi 26 mars 2005
Statut
Membre
Dernière intervention
23 septembre 2015

En tout cas ce n'est pas une erreur de link mais bien de compilation.
As-tu vérifié que QSerialEdit ne fait pas partie d'un namespace comme QSerialWidget ?


Coin coin !