Accueil > Forum > > > > Fonction à nbr d'arguments variable
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;
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURSTECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURS par ROMELARD Fabrice
Animé par: Laurent Cotton Le développement dans SharePoint 2010 passe par plusieurs axes qui seront évoqués dans cette session, mais plus particulièrement les développements simples lié au besoin Business Business Connectivity Services Ce BCS es...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOURTECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOUR par ROMELARD Fabrice
Cette session est la dernière pleinière de ces 3 jours de TechDays Paris 2010. Généralement, cette troisième journée est plus axée sur l'avenir vu par Microsoft. Après un retour sur l'avenir vu par la Science Fiction ou par ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion
Forum
RE : WIN APIRE : WIN API par racpp
Cliquez pour lire la suite par racpp
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|