IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

impossible de convertir le paramètre 1 de 'char' en 'char *'


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 59
    Points : 56
    Points
    56
    Par défaut impossible de convertir le paramètre 1 de 'char' en 'char *'
    Bonjour,

    Je débute en c++, je voudrais faire un petit programme qui demande a l'utilisateur son nom qui serait introduit dans un tableau de char, mais j'ai une erreur qui se situe au niveau de l'appel de la fonction AskName() => "impossible de convertir le paramètre 1 de 'char' en 'char *'"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    char* AskName(char* aName){
          cout << "Entrez votre nom";
          cin.getline(aName, 50);
          return aName;
    }
     
     
    void main(void){
           char name[50];
           AskName(*name);
    }
    merci

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Quelque part, c'est tout à fait normal...

    Lorsque tu déclares un tableau de caractères sous la forme de
    tu déclares une variable nommée tab qui représente (ou peu s'en faut) l'adresse à laquelle on va trouver le premier élément d'un ensemble de n char consécutifs (et dont le premier est à l'index...0)

    Si tu suis ce raisonnement, tu te rend compte que tab peut etre considéré comme... un pointeur

    Du coup, lorsque tu invoque ta fonction sous la forme de
    ce que tu passe à cette fonction (qui attend... un pointeur sur char), c'est "ce qui est pointé par" tab, et ca correspond à... un caractère (le premier des n caractères contigus réservés pour tab, en l'occurrence).

    Il t'appartient donc à faire de manière à ce que le prototype et l'appel de la fonction correspondent, en l'occurence, en invoquant la fonction sous la forme de
    car tu veux que la fonction manipule... un tableau de caractères

    Ceci dit, il faut noter que le C++ fournit une classe qui est bien plus facile et sécurisante à l'emploi que les chaines de caractères C style.

    Il s'agit de la classe string, disponible (comme tout ce qui est fourni par le standard) dans l'espace de noms std grâce à l'inclusion du fichier d'en-tête <string> (remarque l'absence d'extension ).

    Cette classe devrait être préférée dans la grande majorité des cas (comme, pour faire simple, l'ensemble des classes et fonctions fournies par le standard) à toute possibilité équivalente offerte par le C

    PS: la fonction main doit normalement renvoyer un entier parmis:
    0 si tout s'est déroulé correctement
    1 si le programme s'arrête sur une erreur
    2 si le programme s'arrête après avoir émis un avertissement (unixoïdes uniquement)

    un "squelette" correct de la fonction main serait donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main() 
    {
        /* tout ce qui doit être fait */
        return 0;
    }
    PS2: lorsqu'il n'y a aucun argument à passer à une fonction (comme c'est le cas pour main dans ton exemple) tu n'est pas obligé de préciser void

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 59
    Points : 56
    Points
    56
    Par défaut
    ok merci pour ces précisions, en fait je dois utiliser un tableau de char et non de string (pour pouvoir savoir les manipuler).
    J'ai corrigé d'après ton exemple et ça marche nickel, encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/05/2011, 10h57
  2. Réponses: 4
    Dernier message: 25/02/2010, 15h22
  3. Réponses: 20
    Dernier message: 08/12/2009, 20h42
  4. Réponses: 1
    Dernier message: 28/03/2009, 18h23
  5. Réponses: 1
    Dernier message: 09/07/2008, 15h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo