begin process at 2010 02 10 13:45:20
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Fonction à nbr d'arguments variable


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Fonction à nbr d'arguments variable

mardi 22 novembre 2005 à 19:27:24 | Fonction à nbr d'arguments variable

Xilofeon

Bonjour.
 
Alors gros problème.
J'utilise des fonctions à nombres variables d'arguments. Alors je vais vous montré le code est expliqué aprés car je vois pas trop comment l'expliqué clairement.

bool get_bool(int type, ...) {
 va_list varg;
 va_start(varg, type);
 bool ret = maclass::mafonction(type, varg);
 va_end(varg);
 return ret;
}

bool maclass::mafonction(int type, ...) {
 va_list varg;
 va_start(varg, type);
 bool ret = false;

 if (type == type1) {
  const char* tmp = va_arg(varg, const char*);
  const char* tmp2 = va_arg(varg, const char*);
  ret = class2::mafonction2(tmp, tmp2);
 }
 va_end(varg);
 return ret;
}

voila dans ce cas rien ne vas pas, les variables tmp et tmp2, non rien avoir avec ce qui est injecté dans la fonction get_bool(); normalement j'utilise aussi des pointeurs mais j'ai même pas esayé de voir si il était bon, voyant ce que sa peut donné avec des const char*.

voila merci de votre aide.

PS: si je fait des test dans la fonction get_bool() les valeurs sont bonne.

mardi 22 novembre 2005 à 21:32:39 | Re : Fonction à nbr d'arguments variable

luhtor

Tu as vraiment besoin d'un nombre d'argument variable ? Si oui, utilise plutot le type "void*" plutot que "char*"

=> http://www.cppfrance.com/code.aspx?ID=10301
mardi 22 novembre 2005 à 22:28:52 | Re : Fonction à nbr d'arguments variable

Xilofeon

rien y fait cela ne fonctionne pas. J'ai esayé :

  char* tmp2 = (char*)va_arg(varg, void*);
et
  const char* tmp2 = (const char*)va_arg(varg, void*);

je pense que le problème vien d'ici

bool ret = maclass::mafonction(type, varg);

comme si "varg" ne recopié pas bien les différents arguments.

________________
PS:
bool get_bool();
est en faite une fonction exporté dans une dll

PS2: J'aurait pas par hazard oublié d'inclure quelque chose ou faire une indication particulére au compilateur: j'ai seulement sa :

#define WIN32_LEAN_AND_MEAN // Exclure les en-têtes Windows rarement utilisés

// Fichiers d'en-tête Windows :

#include <windows.h>

#include <tchar.h>

#include <stdarg.h>

mercredi 23 novembre 2005 à 00:23:05 | Re : Fonction à nbr d'arguments variable

luhtor

Mais tu as un problème ici:
va_list varg;
 va_start(varg, type);
 bool ret = maclass::mafonction(type, varg);
 va_end(varg);

je suis pas sur que tu peux utiliser varg comme ca. Il faut que tu lises tous les objets un par un, puis tu appel ta fonction avec tout les objets en arguments et non comme tu voudrais le faire, tout les a arguments en un pointeur (ou je sais pas quoi).
Tu dois surement dabord récupérer les objets avec ca:
int obj;
obj = va_arg(listArg,int); <= enfin suivant le type d'objet que tu récupères.

Et après, tu fais maclass::mafonction(type, obj, obj2, obj3);

Mais tes sur d'avoir absolument besoin de faire ce genre de manipulation, ca sent plutot le plantage :)


mercredi 23 novembre 2005 à 09:36:43 | Re : Fonction à nbr d'arguments variable

Xilofeon

Je ne peut connaitre à l'avance le nombre total d'arguments vu que c'est une fonction exporté de dll. bon par contre si je fait : maclass::mafonction(type, va_arg(varg, void*), va_arg(varg, void*), va_arg(varg, void*)); Je pense que cela devrais être ok. Par contre petit question est t'il possible de savoir le nombre de paramêtre à l'aide d'une petite fonction?
mercredi 23 novembre 2005 à 12:58:44 | Re : Fonction à nbr d'arguments variable

luhtor

Sans connaitre le nombre d'argument, je vois pas trop comment tu pourrais faire. dsl


mercredi 23 novembre 2005 à 13:41:36 | Re : Fonction à nbr d'arguments variable

ekinox17

moi j'ai une idee : si tu utilisai un tableau dans le lequel tu mettrai tes variables et apres tu tu fai un sizeof(tableau) pour savoir le nimbre de tes argument et tu passe le tableau dans ta fonction comme parametre
mercredi 23 novembre 2005 à 17:32:09 | Re : Fonction à nbr d'arguments variable

Xilofeon

bon j'ai trouvé comment faire : void* arg1 = va_arg(varg, void*); void* arg2 = va_arg(varg, void*); void* arg3 = va_arg(varg, void*); void* arg4 = va_arg(varg, void*); maclass::mafonction(type, arg1, arg2, arg3, arg4, va_arg(varg, void*)); Cela fonctionne sans problème même si la fonction n'a pas tout les arguments.


Cette discussion est classée dans : type, const, bool, ret, varg


Répondre à ce message

Sujets en rapport avec ce message

Combien pèse un objet de type bool? [ par MoDDiB ] Combien pèse un objet de type bool car mon liver omet de le dire :( ? selon moi 1 bit mais bon on ne sait jamais ^^Merci pour la réponse (oui je sais sérialisation d'un bool ou un type enum [ par iznogoud ] Bonjour,J'ai un petit problème lorsque j'utilise ma fonction serialize. Je suis incapble de rentrer des types bool ou des types que j'ai créer. Je sai Manip' des variables du type char... [ par DJeS ] J'ai d'eternels problemes pour manipuler les variables char, const char etc...quand je veux faire passer un argument char a un fonction j'ai souvent d pb avec template et surcharge [ par luhtor ] Je veux créer une classe vecteur dont le type des vecteurs peut varié. Et je cherche à surcharger l'opérateur << . Quand je supprime la notion de temp Aide langage [ par toosdu87 ] Voila je suis complètement débutant sur le C++ et j'aimerai compiler un programme.Le problème est qu'il me créer l'erreur suivante lors de la compilat Impossible de créer un objet [ par daviddubois ] Bonjour tout le monde,Je débute en C++.Je suis occupé à créer un programme qui va me permettre de calculer le rayon d'un triangle, la superficie d'un Mon fopen ne fonctionne pas [ par daviddubois ] Bonjour tout le monde,Mon fopen ne fonctionne pas et je suis bloqué depuis hier soir.    Fichier = fopen(NomFichier,"rt");    if (Fichier == NULL) ret Le service ne démarre pas. [ par ZendeD ] Bonjour à tous,J'ai repris un code sur ce forum permettant de lancer un programme en tant que service. Le programme s'ajoute bien à la liste des servi Conversion string en const char * [ par wallie0703 ] Bonjour j'ai un problème dans mon code : error C2664: 'C843_GcsGetAnswer' : impossible de convertir le paramètre 2 de 'std::string' en 'char *'Voici m Template et operator= (c++) [ par Crownless00 ] J'ai la classe template suivante :template class Point3D{public :    Point3D(Type posX, Type posY, Type posZ) {...}    Point3D() {x = 0; y = 0; z = 0;


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales