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++Builder Discussion :

Class, inline et AnsiString


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 135
    Par défaut Class, inline et AnsiString
    Bonjour,

    J'ai créé une Class:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class Client
    {
        public:
         int            Handle;
         AnsiString Name;
         AnsiString Password;
         char          Tel[10];
         void Create(int handle, AnsiString Name, AnsiString password, char tel[10]);    
    };
    et un inline
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    inline void Client::Create(int handle, AnsiString name, AnsiString password, char tel[10])
    {   
         Handle    = handle;
         Name      = name;
         Password = password;
         strcpy(Tel, tel); 
    }
    mais j'ai un message d'avertissement inline...

    Egalement déclaré un vecteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        vector <Client> vecClient;
        vector <Client>::iterator iterClient;
    et dans ma class de la form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        vecClient vClient;
        iterClient itClient;
    et j'ai un message d'erreur comme quoi Create n'existe pas quand j'utilise le vector pour créer un client
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        vClient.push_back(Create(2, "Toto", "****", "0320534704"));
    pouvez-vous m'aiguiller?

  2. #2
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,
    Juste une proposition:
    ....
    Ne faut il pas déclarer une instance de la class 'Client' dans la TForm ?
    C'est a dire mettre en .H:
    et après appeler sa méthode avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AClient.Create(...);
    @ +

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 71
    Par défaut
    Bonjour

    A la place de ta fonction Create, mets un constructeur pour ta classe Client, le constructeur porte le mon de la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // dans ta déclaration de classe
    Client(int handle, AnsiString Name, AnsiString password, char tel[10]); 
     
    // dans le fichier .cpp
    Client::Client(int handle, AnsiString name, AnsiString password, char tel[10])
    {   
         Handle    = handle;
         Name      = name;
         Password = password;
         strcpy(Tel, tel); 
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vector <Client> vecClient;
    Là tu crée un vecteur d'objets de type Client et ce vecteur s'appelle vecClient.
    Si tu veux remplir le vecteur, tu y mets des objets Client.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Client Zidane = new Client(2, "Toto", "****", "0320534704");
    vecClient.push_back(*Zidane);
    Quelque chose comme ça doit marcher.
    Laisse tomber les inline, tu les utiliseras plus tard.

    Un apprentissage des notions de base de C++ au moyen d'un bon bouquin te faciliterais beaucoup les choses (C++ facile, N° 889, editions Marabout, pas cher)

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    mais j'ai un message d'avertissement inline...
    Les fonctions inline doivent être entièrement définies dans des en-têtes (pas dans des .cpp). La raison est simple : un appel à une fonction inline étant remplacé par le code de la fonction, si celui-ci n'est pas disponible le compilo ne pourra pas faire son boulot.

    Client Zidane = new Client(2, "Toto", "****", "0320534704");
    vecClient.push_back(*Zidane);
    Rien de mieux pour chopper des fuites de mémoire (qui va détruire l'instance que tu as allouée dynamiquement ?)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vecClient.push_back(Client(2, "Toto", "****", "0320534704"));

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 135
    Par défaut
    Les fonctions inline doivent être entièrement définies dans des en-têtes (pas dans des .cpp). La raison est simple : un appel à une fonction inline étant remplacé par le code de la fonction, si celui-ci n'est pas disponible le compilo ne pourra pas faire son boulot.
    Dans mon exemple c'est ce que j'ai fait, la fonction inline est déclarée juste en dessous de ma class Client dans le même fichier.h
    Rien de mieux pour chopper des fuites de mémoire (qui va détruire l'instance que tu as allouée dynamiquement ?)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vecClient.push_back(Create(2, "Toto", "****", "0320534704"));
    Donc la solution c'est quoi?
    Je me base sur le livre de G Leblanc.
    Sauf que cette syntaxe me cause une erreur disant que Create n'est pas un membre de la class Client!

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Dans mon exemple c'est ce que j'ai fait, la fonction inline est déclarée juste en dessous de ma class Client dans le même fichier.h
    Ah, autant pour moi...
    Commençons dont par le début : quel est le message d'avertissement que te donne le compilo ?

    Donc la solution c'est quoi?
    Je me base sur le livre de G Leblanc.
    Sauf que cette syntaxe me cause une erreur disant que Create n'est pas un membre de la class Client!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vecClient.push_back(Create(2, "Toto", "****", "0320534704"));
    Je n'ai pas écrit ça... Relis mon post.

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/10/2014, 17h10
  2. [AJAX] [SRC] Ajout de classe au tutoriel d'Olivier Lance "modification inline de données"
    Par dream_of_australia dans le forum Contribuez
    Réponses: 8
    Dernier message: 27/10/2014, 19h25
  3. Réponses: 1
    Dernier message: 29/05/2008, 09h52
  4. Une classe pour un tableau à 2dimensions de AnsiString ?
    Par whitespirit dans le forum C++Builder
    Réponses: 5
    Dernier message: 10/12/2007, 15h08
  5. Réponses: 3
    Dernier message: 14/12/2006, 10h09

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