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

Langage C++ Discussion :

Types de variables incompatibles


Sujet :

Langage C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Types de variables incompatibles
    Bonjour
    Je souhaite interroger ma base de donnée et récupérer les valeurs dans un "tableau" défini par struct.
    - pour num, j'obtiens 49 au lieu de 1;
    - pour nom, je ne parviens pas dans la fonction à charger la valeur lue depuis la base dans la variable normalement correspondante de ma structure.

    Erreur indiquée dans MySQL_lire par gcc sur la ligne tableau->nom = *row[1]; :
    error: incompatible types when assigning to type ‘char[30]’ from type ‘char’

    Ma base de donnée contient un champ int nommé num et un champ string (20) pour nom.
    RPI - Raspbian - MySQL
    Merci pour votre aide.

    Extrait de la définition de ma structure .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef struct Commande Commande;
            struct Commande
            {
                    int num;
                    char nom[30];
            };
    Extrait de main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            struct Commande commande = {0, ""};
            ...
            mysql_lire(&requete_sql, &commande);
    Extrait de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void mysql_lire(char (*requete_sql)[100], struct Commande *tableau)
            MYSQL_ROW row;
            while( (row = mysql_fetch_row(result)) )
            {
                  if(num_fields >= 2)
                  {
                        tableau->num = *row[0];
                        tableau->nom = *row[1];
                        printf(" Valeur num : %d \n", tableau->num);
                        printf(" Valeur nom : %s \n", tableau->nom);
                  }
            }

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 195
    Points : 17 163
    Points
    17 163
    Par défaut
    row[1] est visiblement un char*, qu'il faut copier dans nom , c'est à dire un strdup.
    Cela dit, comme tu es en C++, je me demande pourquoi tu n'utilise pas une std::string


    Ton code est beaucoup trop C-esque
    Ta struct commande devrait être créée et retournée par la fonction, pas prise en argument pointée.
    Tu pourras alors bénéficier des constructeurs

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse

    Cela dit, comme tu es en C++, je me demande pourquoi tu n'utilise pas une std::string
    J'avais commancé par string mais cela ne fonctionne pas
    #include <string.h> passe à la compilation avec gcc
    string toto; donne error: unknown type name ‘string’


    row[1] est visiblement un char*, qu'il faut copier dans nom , c'est à dire un strdup.
    J'ai fait un tour sur le net, mais je ne vois pas comment l'intégrer.

    Merci pour ton aide


    Ton code est beaucoup trop C-esque
    Ta struct commande devrait être créée et retournée par la fonction, pas prise en argument pointée.
    Tu pourras alors bénéficier des constructeurs

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 195
    Points : 17 163
    Points
    17 163
    Par défaut
    Parce que <string.h> est <cstring>, un en tête C. Il faut utiliser <string>.

    Les en-têtes C++ n'ont pas de .h dans leurs noms (en temps normal)

    Avec ca, tu pourras revenir à string, et tu auras beaucoup moins de soucis.

  5. #5
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 053
    Points
    33 053
    Billets dans le blog
    4
    Par défaut
    et string se trouve dans le namespace std
    donc std::string

Discussions similaires

  1. Types de variables incompatibles
    Par mickael.be dans le forum Delphi
    Réponses: 4
    Dernier message: 16/07/2006, 23h01
  2. [SQL S 2000] Type de variable ?
    Par Tankian dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/06/2004, 14h03
  3. Assembleur et type de variable delphi
    Par declencher dans le forum Langage
    Réponses: 5
    Dernier message: 20/06/2004, 23h21
  4. Comparer les types de variable
    Par onipif dans le forum ASP
    Réponses: 11
    Dernier message: 27/05/2004, 18h07
  5. Types de variables entre mysql/php et flash
    Par ramses83 dans le forum Flash
    Réponses: 2
    Dernier message: 06/10/2003, 18h35

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