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 :

Constructeur non accessible


Sujet :

C++

  1. #1
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 232
    Points : 15 525
    Points
    15 525
    Par défaut Constructeur non accessible
    Bonjour,

    Je suis toujours dans mon code avec le compilateur Borland ( http://www.developpez.net/forums/viewtopic.php?t=227410 ) et cette fois ci j'ai une erreur de visibilité de la méthode alors que d'après ce que j'ai compris la classe CharArray est une classe standard

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Error E2247 VNCServerWin32.cxx 206: 'CharArray::CharArray(const CharArray &)' is not accessible in function VNCServerWin32::run()
    l'erreur est sur la 2ème ligne, là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
                CharArray viewer 
                	= new char[command->cbData + 1];
    ...
    Est ce que vous savez d'où ça peu venir ?

  2. #2
    Membre actif Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Points : 288
    Points
    288
    Par défaut Re: Constructeur non accessible
    Citation Envoyé par mathix
    ... d'après ce que j'ai compris la classe CharArray est une classe standard
    je ne pense pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CharArray::CharArray(const CharArray &)
    peut-être que ce constructeur est protected / private.

  3. #3
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Définitivement pas standard. Dans le standard, les seules fois où l'on trouve des majuscules, c'est dans les noms de constantes définies via le pré-compilateur.

    C'est quoi la définition de ta classe ? Les opérations de recopies ont été interdites ? Ta conversion implicite est-elle bien autorisée ?
    Pourquoi ne pas utiliser les classes standard ? (std::vector<>, ...)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 232
    Points : 15 525
    Points
    15 525
    Par défaut
    en fait c'est à la base un projet créé avec Microsoft Visual C++ 6.0 et comme je ne l'ai pas à disposition j'essaye de le compiler avec Borland C++ Compiler 5.5
    apparamment c'est alors une classe propre à VC++ donc je n'arriverai à rien sans refaire le code ?

  5. #5
    Membre actif Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Points : 288
    Points
    288
    Par défaut
    Citation Envoyé par mathix
    apparamment c'est alors une classe propre à VC++ donc je n'arriverai à rien sans refaire le code ?
    encore une fois, non
    cette classe n'existe pas dans Visual C++...

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 232
    Points : 15 525
    Points
    15 525
    Par défaut
    je suis reparti dans l'exploration des inclusions et j'ai fini par trouver la classe CharArray dans un fichier util.h ...
    et celui-c contenait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      private:
        CharArray(const CharArray&);
        CharArray& operator=(const CharArray&);
    je me suis dépéché d'ôter le "private" et là je n'ai plus d'erreur
    donc Résolu
    merci à vous

  7. #7
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Si la copie était interdite, il y avait une bonne raison -- il plantera à l'exécution.
    Réactive-là et corrige ton code pour qu'il soit conforme à l'utilisation attendue de la bibliothèque.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  8. #8
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 232
    Points : 15 525
    Points
    15 525
    Par défaut
    le problème c'est que ce sont les sources d'une application que j'essaye de compiler donc je ne connais pas encore l'utilisation des différentes classes

  9. #9
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Ben .. ces deux lignes indiquent que cette classe n'est pas copiable. Et que par extension ne dispose pas d'une sémentique de valeur.

    Je serais curieux de voir les autres constructeurs vu qu'une conversion implicite t'es refusée. Ce qui me fait penser que peut-être cela vient du fait que tu devrais plutôt écrire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CharArray viewer(new char[command->cbData + 1]);
    GOTW pour les explications.

    Et, Es-tu réellement obligé de t'en servir ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  10. #10
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 232
    Points : 15 525
    Points
    15 525
    Par défaut
    Citation Envoyé par Luc Hermitte
    Je serais curieux de voir les autres constructeurs vu qu'une conversion implicite t'es refusée.
    voici le code initial du .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
      class CharArray {
      public:
        CharArray() : buf(0) {}
        CharArray(char* str) : buf(str) {} // note: assumes ownership
        CharArray(int len) {
          buf = new char[len];
        }
        ~CharArray() {
          delete [] buf;
        }
        // Get the buffer pointer & clear it (i.e. caller takes ownership)
        char* takeBuf() {char* tmp = buf; buf = 0; return tmp;}
        void replaceBuf(char* b) {delete [] buf; buf = b;}
        char* buf;
     
      private:
        CharArray(const CharArray&);
        CharArray& operator=(const CharArray&);
      };
    Citation Envoyé par Luc Hermitte
    GOTW pour les explications.
    GOTW ?

    Citation Envoyé par Luc Hermitte
    Et, Es-tu réellement obligé de t'en servir ?
    aucune idée, je découvre le code

  11. #11
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 232
    Points : 15 525
    Points
    15 525
    Par défaut
    Citation Envoyé par Luc Hermitte
    Ce qui me fait penser que peut-être cela vient du fait que tu devrais plutôt écrire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CharArray viewer(new char[command->cbData + 1]);
    ok merci du conseil

    en plus les 2 méthodes privées n'ont pas l'air d'avoir de corps donc je vais mettre le code que tu m'as proposé sans toucher au .h
    par contre je vais pas encore pouvoir tester parce que j'ai un problème de compilation d'une ressoucre mais je vais chercher encore quelques heures et si ca n'avance pas ca fera l'objet d'un autre sujet

    merci à toi, j'ai une petite voix qui me dit que je suis plus proche du but qu'avant
    et je vais mettre ce sujet en Résolu si tu n'as plus rien de spécial à dire

  12. #12
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    GOTW -> Guru Of The Week.
    (Je vais tester plutard ce code ; un petit doute sur un truc)

    EDIT: :s/foute/doute/
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  13. #13
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Effectivement le problème venait bien de l'utilisation de l'initialisation par copie plutôt que de l'initialisation directe.
    La forme avec =, est l'initialisation par copie. Elle commence par construire un temporaire non-nommé qui sera ensuite recopié avec le constructeur par recopie. Or ce dernier a été interdit.

    Plus d'infos dans item #36 de GOTW.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

Discussions similaires

  1. Constructeur non accessible
    Par mathieu dans le forum C++
    Réponses: 1
    Dernier message: 03/09/2006, 23h43
  2. Réponses: 2
    Dernier message: 05/01/2006, 14h17
  3. [ORA-01110:] Datafile non accessible
    Par Isa31 dans le forum Oracle
    Réponses: 4
    Dernier message: 29/12/2005, 12h02
  4. Réponses: 4
    Dernier message: 10/12/2005, 13h40
  5. web local non accessible
    Par attavus dans le forum Apache
    Réponses: 1
    Dernier message: 21/09/2005, 09h54

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