Initialisation variable

Signaler
Messages postés
12
Date d'inscription
mercredi 6 juillet 2011
Statut
Membre
Dernière intervention
1 août 2011
-
Messages postés
12
Date d'inscription
mercredi 6 juillet 2011
Statut
Membre
Dernière intervention
1 août 2011
-
Bonjour
Je suis débutant et j'essaye d'écrire un code en C++ mais j'ai un problème d'initialisation de mes variables dans ma class. J'initialise à 0, j'affecte une nouvelle valeur mais le logiciel me renvoi toujours 0.
Si quelqu'un pourrait juste me dire ou est mon erreur ça serait super.
Je met une partie du code si ça peut être utile
Merci d'avance

fichier.h

#ifndef CALDEBIT_H
#define CALDEBIT_H

#include <QWidget>

class QDoubleSpinBox;
class QGroupBox;
class QLabel;
class QPushButton;
class QAction;
class QMessageBox ;
class QString ;

class Window : public QWidget
{
Q_OBJECT

public:

void Init()
{
Ivalcote = 0;
}

Window();

public slots:

void Resultats();
double calculs();
void OnClick();

private:
double CoteDebit();
void Boutons();
void quit();
void setText();

QDoubleSpinBox *doubleSpinBox;
QGroupBox *spinBoxesGroup;
QGroupBox *editsGroup;
QGroupBox *doubleSpinBoxesGroup;
QLabel *label;
QPushButton *boutonok;
QPushButton *boutonQuitter;
QAction *exitAction;

double Ivalcote;
double Ivalcote1;
double Ivaldebit;
double valcote;
double valcote1;
double valdebit;
};

#endif // CALDEBIT_H

fichier.cpp

Window::Window()
{
CoteDebit();
Boutons();

QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(spinBoxesGroup);
layout->addWidget(editsGroup);
layout->addWidget(doubleSpinBoxesGroup);
setLayout(layout);



setWindowTitle(tr("Calculateur du Barrahe de Villerest"));
}

double Window::CoteDebit()
{
Init();

spinBoxesGroup = new QGroupBox(tr("Cotes et Débit : "));

QLabel *retenue = new QLabel(tr("Entrer la cote de la retenue précedente : "));

QDoubleSpinBox *SpinBox = new QDoubleSpinBox;
SpinBox->setRange(270, 325);
SpinBox->setSingleStep(0.01);
SpinBox->setValue(0);
valcote = SpinBox->value();

QLabel *retenueactuelle = new QLabel(tr("Entrer la cote de la retenue actuelle : "));

QDoubleSpinBox *retactu = new QDoubleSpinBox;
retactu->setRange(270, 325);
retactu->setSingleStep(0.01);
retactu->setValue(0);
valcote1 = retactu->value();

QLabel *debitsortant = new QLabel(tr("Entrer la valeur du débit sortant actuel : "));

QDoubleSpinBox *debsor = new QDoubleSpinBox;
debsor->setRange(0, 4000);
debsor->setSingleStep(0.01);
debsor->setValue(0);
valdebit = debsor->value();

QGridLayout *spinBoxLayout = new QGridLayout;
spinBoxLayout->addWidget(retenue,0,0);
spinBoxLayout->addWidget(SpinBox,1,0);
spinBoxLayout->addWidget(retenueactuelle,3,0);
spinBoxLayout->addWidget(retactu,4,0);
spinBoxLayout->addWidget(debitsortant,6,0);
spinBoxLayout->addWidget(debsor,7,0);

spinBoxesGroup->setLayout(spinBoxLayout);

Ivalcote=valcote;
Ivalcote1=valcote1;
Ivaldebit=valdebit;

return Ivalcote;
return Ivalcote1;
return Ivaldebit;
}
void Window::Resultats()
{

QString res ;
res.setNum (Ivalcote);
QString res1;
res1.setNum (valcote1);
QString Qs ;
Qs.setNum(valdebit);
QString Time;
Time.setNum(Dt);
QString Vol;
Vol.setNum(DV);
QString Qe;
Qe.setNum(debitentrant);

qDebug() << "la première cote de la retenue est au niveau"<<Ivalcote<<"NGF.";
qDebug() << "la deuxième cote de la retenue est au niveau"<<valcote1<<"NGF.";
qDebug() << "le débit sortant est de"<<valdebit<<"M3/s.";
}

6 réponses

Messages postés
15108
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
30 juillet 2021
97
Hello,
D'une, c'est du Qt.
De deux, tu ne dis pas quelle variable te pose problème.
Un peu plus de précision, s'il te plaît?


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
12
Date d'inscription
mercredi 6 juillet 2011
Statut
Membre
Dernière intervention
1 août 2011

Bonjour Buno,
Désolé j'ai poster le message dans la partie C++ parce que c’était un problème de class.
Toutes les variables me pose problèmes si je comprend comment en faire une je pourrai toutes les corriger.
Par exemple pour :

double Ivalcote;

en mettant une valeur j'obtient toujours la valeur de l'initialisation.

Merci de ton aide
Messages postés
15108
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
30 juillet 2021
97
return Ivalcote; 
return Ivalcote1; 
return Ivaldebit; 
} 

Aïe, aïe, aïe,... pas bon ça..."return" indique à ton programme de quitter la fonction en cours. Donc, très logiquement, les 2 derniers returns ne seront jamais exécuté. Y'a un truc que t'as pas dû piger je pense.

Ensuite, en ce qui concerne l'affectation des variables, places des points d'arrêt et regarde si tu ne leur affectes pas 0, tout simplement.

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
12
Date d'inscription
mercredi 6 juillet 2011
Statut
Membre
Dernière intervention
1 août 2011

Oups :s.
Donc c'est mieux que je passe la fonction en "void" que j’enlève mes "return" et que je récupére la fonction plus loin pour avoir mes résultats ?

Merci
Messages postés
15108
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
30 juillet 2021
97
ça dépend de ce que tu veux faire.
Tu peux très bien déclarer ta méthode comme suit:
double Window::CoteDebit()

Mais il faut un seul return (ou plusieurs mais dans des "branches" différentes: switch, if,...).
A toi de voir quel est l'objectif de cette méthode: retourner un résultat ou non.


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
12
Date d'inscription
mercredi 6 juillet 2011
Statut
Membre
Dernière intervention
1 août 2011

D'accord
Merci de te aide. Je vais essayer de corriger tout ça :).