Faire un "Cast" sur une variable!

Signaler
Messages postés
8
Date d'inscription
samedi 7 février 2004
Statut
Membre
Dernière intervention
14 février 2008
-
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
-
Bonjour, je sais pas si vous allez comprendre ma question! mais elle est assez simple

J'ai une boucle for
et jai 25 variable nommée Case_P1 à Case_P25
Je veux faire le plus simple possible dans ma boucle et éviter la redondance de code et afficher dans les 25 TextBox appelé ECase_1 à ECase_25:
Ainsi je suppose que ca l'aurais été ca :

for (int i =1;i<=25;i++)
{

char *name= ("CaseP" + String(i)).c_str();
double *NV = reinterpret_cast<double*> (name);
E_Case_(i)->Text = String(*NV);
// je veux la variable Case_P(i); pas compliqué non!
//Alors si simple pourtant compliqué
E_Case_(i) = Case_P(i);
}

Et non je ne peux pas utiliser les vecteur et non plus les tableau, car il y a déja du code d'implanté avec ces variable globale!

C++ Programmeur
Xan8ter

18 réponses

Messages postés
565
Date d'inscription
mercredi 19 mai 2004
Statut
Membre
Dernière intervention
30 avril 2008
1
Je n'ai pas un niveau extreme en C/C++ cependant d'apres ce que je sais , c'est impossible a moin que tes Case_Px aient eté placer en mémoire consecutivement (autrement dit un tableau). Si il ne s'agit que de 25 variables rien ne t'empeche de le faire sans utiliser de i et de boucle.

Si l'informatique été de l'alcool il y aurait des genies partout
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
char *name= ("CaseP" + String(i)).c_str();
Ça compile ça ?

E_Case_ -> C'est une fonction ?
J'espère que tu n'essais pas de concatener i à E_Case_ à même le code ?
(Pour donner par exemple E_Case_1 E_Case_2 E_Case_3)

Si oui, c'est un bouquin de C++ que tu as besoin.

Et, pour faire équivalent, il n'y a pas d'autre façon que d'utiliser soit un tableau soit une liste (chainée ou non).

C++ (@++)<!--
Messages postés
8
Date d'inscription
samedi 7 février 2004
Statut
Membre
Dernière intervention
14 février 2008

>>>>E_Case_ -> C'est une fonction ? 
   Réponse : non, c'est comme, E_case.Text c'est du borland builder C++ et non du VC! ou du GCC

>>>>J'espère que tu n'essais pas de concatener i à E_Case_ à même le code ?
(Pour donner par exemple E_Case_1 E_Case_2 E_Case_3)
Réponse : Exactement cela! que je veux dire! mais avec les variable aussi! Case_P(i)

Ca peut arriver ke ca l'existe pas, mais serait bien si yaurais une facons!

C++ Programmeur
Xan8ter
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Un tableau ou une liste. Je ne vois pas comment autrement.

C++ (@++)<!--
Messages postés
8
Date d'inscription
samedi 7 février 2004
Statut
Membre
Dernière intervention
14 février 2008

Ouais, mais si ca l'existe et que quelqu'un le sait, merci de me le faire savoir par ce forum
:)

C++ Programmeur
Xan8ter
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Avec une macro et une boucle, avec un peu de chance le compilateur transformera ça en liste lui-même :

#define

_ASSIGN(object,member,source,index) object##index->member=source##index

et utilisation :
for(int j=0;j<25;j++) _ASSIGN(E_Case_,Text,Case_P,i);
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
La ligne exacte est :
#define _ASSIGN(object,member,source,index) object##index->member=source##index
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Aucune chance que ça fonctionne si index n'est pas une valeur constante.
Ça ne fera que concatener j à E_Case_
Fera E_Case_j E_Case_j E_Case_j E_Case_j etc. etc. etc.

[auteur/PROGEZ/227529.aspx Progez] >> Pour la 3ème fois, NON c'est impossible.

C++ (@++)<!--
Messages postés
8
Date d'inscription
samedi 7 février 2004
Statut
Membre
Dernière intervention
14 février 2008

wow! faut que j'essaye ca :) thx
Mais le params Text que tu met, c bien un membre comme moi c un TEdit j'inscrit TEdit * a cette place!

C++ Programmeur
Xan8ter
Messages postés
8
Date d'inscription
samedi 7 février 2004
Statut
Membre
Dernière intervention
14 février 2008

Ouin j'ai essayé, et ca fonctionne pas, tas bien raison, Non c'est impossible! mais y dise kia rien d'impossible en c++ voila!
ca c'est impossible!

Défi!

C++ Programmeur
Xan8ter
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
C'est vrai qu'il n'y a rien d'impossible à faire avec LES PROGRAMMES faits en C++.
Le code est, comme tout autre langage, limité à sa syntaxe.

C++ (@++)<!--
Messages postés
8
Date d'inscription
samedi 7 février 2004
Statut
Membre
Dernière intervention
14 février 2008

Haha! ca marche aille thx!!

c'est la solution à l'autre mais regardez bien comment faire!

#define _ASSIGN(object,member,source,index) object##index->member=String(source##index)

        for (int i =0;i <=25;i++)
        {
            int P1 = i ;
            _ASSIGN(Ecase,Text,case,P1);
        }

Mes TextBox s'appelle EcaseP1 <a EcaseP25 et mes variable s'appelle caseP1 à caseP25!

Et ca fonctionne
l'impossible est possible en c++
:P

C++ Programmeur
Xan8ter
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Ça ne fonctionne pas pour moi et je ne vois pas du tout comment ça pourrait fonctionner.

C++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Dans ton exemple, tu ne fais que concatener P1 à Ecase et Text et non la valeur de i.
En gros ton code revient à ceci:

for (int i =0;i <=25;i++)
{
    EcaseP1->Text = String(caseP1);
}

C++ (@++)<!--
Messages postés
8
Date d'inscription
samedi 7 février 2004
Statut
Membre
Dernière intervention
14 février 2008

ouais ta bien raison, ca ne le fait qu'avec la premiere fois! ca ne peut pas car un define cest en constance!
C++ Programmeur
Xan8ter
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Les #define sont traduit dans le code par le préprocesseur. Cette opération ce fait avant la compilation. Il est donc complètement impossible qu'un #define puisse prendre une variable puisque que son contenue est inconnue (et est, de toute façon, variable).

C++ (@++)<!--
Messages postés
8
Date d'inscription
samedi 7 février 2004
Statut
Membre
Dernière intervention
14 février 2008

exactement! mais ca serait plaisant si ca l'existerais, on sauverais du temp parfois ! et des ligne de codes inutiles! de toute facon! jai fait une fonction récursive avec un objet en params au lieu et ca marche tres bien, merci a tous pour votre aide!

C++ Programmer
Xan8ter
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
désolé pour ma part, je n'y étais pas hier soir...