Compilation : edition de liens

Résolu
kenshin28 Messages postés 5 Date d'inscription mercredi 23 juillet 2008 Statut Membre Dernière intervention 17 juin 2010 - 1 juin 2010 à 12:07
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

5 réponses

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
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.
3
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
1 juin 2010 à 17:15
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...
0
kenshin28 Messages postés 5 Date d'inscription mercredi 23 juillet 2008 Statut Membre Dernière intervention 17 juin 2010
2 juin 2010 à 08:51
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) ?
0
kenshin28 Messages postés 5 Date d'inscription mercredi 23 juillet 2008 Statut Membre Dernière intervention 17 juin 2010
7 juin 2010 à 14:24
Up Up Up !!!

Je n'ai toujours pas trouvé pourquoi. Si quelqu'un peut m'aider ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dragonjoker59 Messages postés 92 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 23 septembre 2015
16 juin 2010 à 10:52
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 !
0
Rejoignez-nous