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 :

Problème de convertion de 'const char en "char" [-fpermissive]


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2021
    Messages : 10
    Par défaut Problème de convertion de 'const char en "char" [-fpermissive]
    Bonjour a tous, je bosse sur des enregistrement et j'ai une mesage d'erreur qui est "invalid conversion from ‘const char*’ to ‘char’ [-fpermissive]" je ne comprend pas pourquoi et aimerai avoir un peu d'aide pour m'en sortir.
    Merci d'avance pour vos réponse

    Nom : Cap.png
Affichages : 148
Taille : 68,7 Ko


    Nom : CapEr.png
Affichages : 140
Taille : 20,4 Ko

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 773
    Par défaut
    si tu avais lu ton cours sur les chaînes de caractères, tu aurais appris que :
    • dans 1 variable de type char, tu ne mets qu'1 seul caractère
    • que "Hawai 5.0" est 1 chaîne de caractères littérale
    • qu'en C/ C++ avec le type de base char, les copies/ transferts automatiques et les concaténations n'existent pas
    • qu'en C/ C++ avec le type de base char, les chaînes de caractères sont des tableaux terminés par le caractère '\0'


    Donc, qu'est-ce que tu ne comprends pas ? Tu essayes d'assigner 1 chaîne de caractères (son adresse pour être précis) dans 1 caractère. Cela ne fonctionne pas.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    stdio.h sert à quoi ?
    Pourquoi pas utiliser std::string ?
    Tu peux copier le code directement au lieu d'uploader une image.
    main est de type int, il faudrait return à la fin.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Heu, tu déclares le champs nom de ta structrure série comme étant un (ET UN SEUL) caractère, mais tu essaye d'en mettre ... 9 lorsque tu tente de définir le nom de h50 comme étant "Hawai 5.0".

    Et tu t'étonne que cela ne fonctionne pas

    Sais tu que C++ dispose, depuis déjà près de 25 ans, d'une classe qui s'occupe de gérer toute seule les problèmes liés à la mémoire que l'on alloue aux chaines de caractère et qui s'appelle std::string?

    Tu serais vraiment bien inspiré de t'en servir
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 773
    Par défaut
    De toute manière, ton code est mauvais
    C'est du code C avec des std::cout (<- avis personnel LOUL on fait l'inverse on prend du C++ avec des printf, sinon on code tout en C)

    Et ce que tu ne sais pas ou ne comprends pas, c'est lorsque tu codes H50.nom = '"Hawaia 5.0", cela ne fonctionne pas comme les autres langages comme Python/ JavaScrpt par exemple.

    L'assignation fait appel soit au constructeur de copie soit à l'opérateur operator=. Après c'est + compliqué avec les histoires de propriétaires.
    Mais cela seulement si tu utilises 1 classe comme std::string qui a déjà tout prévu ... comme, par exemple, la concaténation avec l'opérateur operator+.

    Avec le type de base char (et donc char* ou char[size] pour 1 chaîne de caractères), c'est à toi de tout faire : calcul de la taille qu'il faut, allocation de la mémoire, copie ou éventuellement déplacement, gestion des erreurs.
    Sans parler de la desallocation et de l'Unicode ... parce que le type de base char (et les fonctions de manipulation des chaînes de caractères dans la bibliothèque standard) sont prévus pour de l'ASCII

    Donc tu choisis de coder soit en C soit en C++


    Édit : Tu utilises 1 entête C stdio.h, mais en C++ il faut utiliser les entêtes C écrites en C++ cstdio (<- avec 1 c en préfixe et sans l'extension)

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Pour compléter les réponses précédentes, je pense qu'il faut expliciter ce que fait cette ligne et la mettre en regard de l'erreur :

    H50.name est de type char et "Hawaii 5.0" est de type const char* (c'est un string literal https://en.cppreference.com/w/cpp/la...string_literal).

    Tu essayes donc de convertir un const char* en char. Cette conversion est invalide et génère une erreur.

  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Bousk Voir le message
    main est de type int, il faudrait return à la fin.
    Ce n'est pas obligatoire

    Voir https://stackoverflow.com/questions/...urn-0-optional

    C99 and C++ special case the main function to return 0 if control reaches the end without an explicit return. This only applies to the main function.
    Ou : https://en.wikipedia.org/wiki/Entry_point#C_and_C.2B.2B

    In case a return value is not defined by the programmer, an implicit return 0; at the end of the main() function is inserted by the compiler; this behavior is required by the C++ standard.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 06/04/2011, 16h54
  2. Problème conversion const char *
    Par autoz dans le forum Débuter
    Réponses: 5
    Dernier message: 15/10/2009, 21h19
  3. Réponses: 8
    Dernier message: 07/05/2008, 09h57
  4. problème avec const char * et #define macro
    Par CodeurNé dans le forum C
    Réponses: 5
    Dernier message: 20/09/2006, 21h25

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