Compilation : edition de liens [Résolu]

Messages postés
5
Date d'inscription
mercredi 23 juillet 2008
Statut
Membre
Dernière intervention
17 juin 2010
- - Dernière réponse : kenshin28
Messages postés
5
Date d'inscription
mercredi 23 juillet 2008
Statut
Membre
Dernière intervention
17 juin 2010
- 17 juin 2010 à 10:21
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
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
5
Date d'inscription
mercredi 23 juillet 2008
Statut
Membre
Dernière intervention
17 juin 2010
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 186 internautes nous ont dit merci ce mois-ci

Commenter la réponse de kenshin28
Messages postés
14636
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
9 octobre 2019
90
0
Merci
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...
Commenter la réponse de BunoCS
Messages postés
5
Date d'inscription
mercredi 23 juillet 2008
Statut
Membre
Dernière intervention
17 juin 2010
0
Merci
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) ?
Commenter la réponse de kenshin28
Messages postés
5
Date d'inscription
mercredi 23 juillet 2008
Statut
Membre
Dernière intervention
17 juin 2010
0
Merci
Up Up Up !!!

Je n'ai toujours pas trouvé pourquoi. Si quelqu'un peut m'aider ?
Commenter la réponse de kenshin28
Messages postés
92
Date d'inscription
samedi 26 mars 2005
Statut
Membre
Dernière intervention
23 septembre 2015
0
Merci
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 !
Commenter la réponse de dragonjoker59