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 :

Je ne peux pas atteindre des méthodes alors qu'elles sont en publiques


Sujet :

C++

  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2004
    Messages : 3 610
    Points : 1 315
    Points
    1 315
    Par défaut Je ne peux pas atteindre des méthodes alors qu'elles sont en publiques
    Bonjour tout le monde,

    J'ai un petit problème.

    J'essaie d'atteindre une certaine classe mais j'obtiens ce message d'erreur :

    CTabOrigines::CTabOrigines' : cannot access private member declared in class 'CTabOrigines'
    J'ai la même chose avec le destructeur :

    CTabOrigines::~CTabOrigines' : cannot access private member declared in class 'CTabOrigines'
    Ce qui est bizarre, s'est que j'ai bien déclaré ces méthodes en public :
    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
    20
    21
    22
    23
    24
    25
     
    class CTabOrigines : public CTableauGenerique
    {
     
    public:
    	CTabOrigines();
    	CTabOrigines(const CTabOrigines& Source);
    	~CTabOrigines();
     
    public:
    	CChiens&			Element(long UnIndice) const;
    	long				Indice(const char* UnNom) const;
     
    	bool				Ajouter(const CChiens& Modele);
    	void				Trier();
     
    	void				Afficher(const char* FiltreSurType=NULL) const;
    	bool				Charger(const char* NomFichier);
     
    private:
    	static bool			FctnTraiterLigne(const CChargeurFichierTexte& Chargeur, void* Contexte);
    	bool				TraiterLigne(const CChargeurFichierTexte& Chargeur);
     
     
    };
    L'appel se fait la méthode main que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CTableauGenerique	TabOrigines((const CGenerique&)CTabOrigines());
     
    		CTabOrigines	Origines;
     
    		if (!Origines.Charger("chiens.txt"))printf("pas ok");
    		Origines.Trier();
    		TabOrigines.Ajouter(Origines);
     
    	for (n=0; n < TabOrigines.Nombre(); n++)
    	{
    		printf("\n\nTableau des origines \"chiens.txt\"\n");
    		((CTabOrigines&)TabOrigines.Element(n)).Afficher();
    	}
    Voyez-vous quelque qui n'est pas bon ?

    Je vous remercie d'avance.

    beegees

  2. #2
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Au passage, le printf, ça fait un peu désordre...
    -> std::cout ?

  3. #3
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2004
    Messages : 3 610
    Points : 1 315
    Points
    1 315
    Par défaut
    Citation Envoyé par poukill Voir le message
    Au passage, le printf, ça fait un peu désordre...
    -> std::cout ?
    Entièrement d'accord avec toi sauf que pour l'instant j'ai pas le choix.

    Merci quand même.

    beegees

  4. #4
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Re-bonsoir, c'est à quelle ligne exactement le problème?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CTableauGenerique	TabOrigines((const CGenerique&)CTabOrigines());
     
    		CTabOrigines	Origines;
    Edit:

    Peux-tu montrer le code de CTableauGenerique:: (~)CTableauGenerique()?

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2003
    Messages
    5 273
    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 273
    Points : 10 827
    Points
    10 827
    Par défaut
    Il manque toujours des informations comme le vrai fichier principal.cpp qui correspond aux messages d'erreur.


    /me qui continue ici, et qui sent que cela marcherait bien mieux sans ces castings et ces copies d'un autre âge.
    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...

  6. #6
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2004
    Messages : 3 610
    Points : 1 315
    Points
    1 315
    Par défaut
    Citation Envoyé par coyotte507 Voir le message
    Re-bonsoir, c'est à quelle ligne exactement le problème?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CTableauGenerique	TabOrigines((const CGenerique&)CTabOrigines());
     
    		CTabOrigines	Origines;
    Edit:

    Peux-tu montrer le code de CTableauGenerique:: (~)CTableauGenerique()?
    Citation Envoyé par Luc Hermitte Voir le message
    Il manque toujours des informations comme le vrai fichier principal.cpp qui correspond aux messages d'erreur.


    /me qui continue ici, et qui sent que cela marcherait bien mieux sans ces castings et ces copies d'un autre âge.
    Bonjour vous deux,

    Merci pour vos réponse.

    Voici le code du main :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #include <BasicConsole.h>
    #include "chiens.h"
     
    //eviter les doublons de race
     
    void main()
    {
     
    	long n;
     
     
    	CTableauGenerique	TabClassifications((const CGenerique&)CTabClassifications());
     
    		CTabClassifications	Classifications;
     
    		if (!Classifications.Charger("chiens.txt"))printf("pas ok");
    		Classifications.Trier();
    		TabClassifications.Ajouter(Classifications);
     
    	for (n=0; n < TabClassifications.Nombre(); n++)
    	{
    		printf("\n\nTableau des spécifications de \"chiens.txt\"\n");
    		((CTabClassifications&)TabClassifications.Element(n)).Afficher();
    	}
     
    	n=0;
     
     
    		CTableauGenerique	TabOrigines((const CGenerique&)CTabOrigines());
     
    		CTabOrigines	Origines;
     
    		if (!Origines.Charger("chiens.txt"))printf("pas ok");
    		Origines.Trier();
    		TabOrigines.Ajouter(Origines);
     
    	for (n=0; n < TabOrigines.Nombre(); n++)
    	{
    		printf("\n\nTableau des origines \"chiens.txt\"\n");
    		((CTabOrigines&)TabOrigines.Element(n)).Afficher();
    	}
     
     
    }
    et coyotte, voici le code demandé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CTableauGenerique::~CTableauGenerique()
    {
    	Vider();
    	delete m_Poubelle;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void CTableauGenerique::Vider()
    {
    	if (m_Tableau != NULL)
    	{
    		for (long n=0; n < m_Nombre; n++) delete m_Tableau[n];
    		free(m_Tableau);
    		m_Tableau = NULL;
    		m_Nombre = 0;
    	}
    }
    j'en donne même un peu plus :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    //////////////////////////////
    // Classe CTableauGenerique //
    //////////////////////////////
     
    CTableauGenerique::CTableauGenerique(const CGenerique& ModelePoubelle)
    :m_Poubelle(NULL),m_Nombre(0),m_Tableau(NULL),m_TypeComparaison(-1)
    {
    	m_Poubelle = ModelePoubelle.Cloner();
    	m_Poubelle->DefinirConteneur(this);
    }
     
    CTableauGenerique::CTableauGenerique(const CTableauGenerique& Source)
    :m_Poubelle(NULL),m_Nombre(0),m_Tableau(NULL),m_TypeComparaison(-1)
    {
    	m_Poubelle = Source.m_Poubelle->Cloner();
    	for (long n=0; n < Source.m_Nombre; n++) Ajouter(Source.Element(n));
    }
     
    CTableauGenerique::~CTableauGenerique()
    {
    	Vider();
    	delete m_Poubelle;
    }
     
    CGenerique* CTableauGenerique::Cloner() const
    {
    	return new CTableauGenerique(*this);
    }
     
    long CTableauGenerique::Nombre() const
    {
    	return m_Nombre;
    	printf("m_Nombre vaut %ld",m_Nombre);
    }
     
    CGenerique& CTableauGenerique::Element(long Indice) const
    {
    	return ((Indice >= 0) && (Indice < m_Nombre)) ? *(m_Tableau[Indice]) : *m_Poubelle;
    }
     
    long CTableauGenerique::Indice(const CGenerique& ModeleRecherche) const
    {
    	if ( (m_Nombre == 0) || (!m_Poubelle->GereUnicite()) || (!ModeleRecherche.EstValide()) ) return -1;
    	const CGenerique* Recherche = &ModeleRecherche;
    	unsigned int n = m_Nombre;
    	((CTableauGenerique*)this)->m_TypeComparaison = ComparaisonPourUnicite;
    	CGenerique** Trouve = (CGenerique**)_lfind(&Recherche,m_Tableau,&n,sizeof(CGenerique*),Comparer);
    	((CTableauGenerique*)this)->m_TypeComparaison = -1;
    	return (Trouve != NULL) ? Trouve - m_Tableau : -1;
    }
     
    void CTableauGenerique::Vider()
    {
    	if (m_Tableau != NULL)
    	{
    		for (long n=0; n < m_Nombre; n++) delete m_Tableau[n];
    		free(m_Tableau);
    		m_Tableau = NULL;
    		m_Nombre = 0;
    	}
    }
     
    bool CTableauGenerique::Ajouter(const CGenerique& ModeleAAjouter, bool RetourEnCasDeDoublon)
    {
    	if (!ModeleAAjouter.EstValide()) return false;
    	if ( (m_Poubelle->GereUnicite()) && (Indice(ModeleAAjouter) >= 0) ) return RetourEnCasDeDoublon;
    	void* Nouveau = realloc(m_Tableau,(m_Nombre+1)*sizeof(CGenerique*));
    	if (Nouveau == NULL) return false;
    	m_Tableau = (CGenerique**)Nouveau;
    	CGenerique* AAjouter = ModeleAAjouter.Cloner();
    	if (!AAjouter->EstValide())
    	{
    		delete AAjouter;
    		return false;
    	}
    	m_Tableau[m_Nombre] = AAjouter;
    	m_Tableau[m_Nombre]->DefinirConteneur(this);
    	m_Nombre++;
    	return true;
    }
     
    bool CTableauGenerique::Supprimer(long Indice)
    {
    	if ( (Indice < 0) || (Indice >= m_Nombre) ) return false;
    	delete m_Tableau[Indice];
    	if (Indice < (m_Nombre-1)) memmove(m_Tableau+Indice,m_Tableau+(Indice+1),(m_Nombre-1-Indice)*sizeof(CGenerique*));
    	realloc(m_Tableau,(m_Nombre-1)*sizeof(CGenerique*));
    	m_Nombre--;
    	return true;
    }
     
    void CTableauGenerique::Trier(long TypeComparaison)
    {
    	if ( (m_Nombre >= 2) && (TypeComparaison >= 1) && (TypeComparaison <= m_Poubelle->NombreClesDeTri()) )
    	{
    		m_TypeComparaison = TypeComparaison;
    		qsort(m_Tableau,m_Nombre,sizeof(CGenerique*),Comparer);
    		m_TypeComparaison = -1;
    	}
    }
     
    /*static*/int CTableauGenerique::Comparer(const void* p1, const void* p2)
    {
    	const CGenerique* o1 = *((const CGenerique**)p1);
    	const CGenerique* o2 = *((const CGenerique**)p2);
    	return o1->Comparer(*o2,o2->Conteneur()->m_TypeComparaison);
    }
    Voilà, je vous remercie encore pour votre aide.

    beegees

  7. #7
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2004
    Messages : 3 610
    Points : 1 315
    Points
    1 315
    Par défaut
    Citation Envoyé par coyotte507 Voir le message
    Re-bonsoir, c'est à quelle ligne exactement le problème?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CTableauGenerique	TabOrigines((const CGenerique&)CTabOrigines());
     
    		CTabOrigines	Origines;
    Edit:

    Peux-tu montrer le code de CTableauGenerique:: (~)CTableauGenerique()?
    Re,

    Voici quel message d'erreur se fait sur quel ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    z:\graduat\c++\cours 07-08\23 04 08\chienstousedd\chiensdd\chienstouse2\chienstouse2\principal.cpp(29) : error C2248: 'CTabOrigines::CTabOrigines' : cannot access private member declared in class 'CTabOrigines'
    sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CTableauGenerique	TabOrigines((const CGenerique&)CTabOrigines());
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    z:\graduat\c++\cours 07-08\23 04 08\chienstousedd\chiensdd\chienstouse2\chienstouse2\chiens.h(75) : see declaration of 'CTabOrigines::CTabOrigines'
    Sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    z:\graduat\c++\cours 07-08\23 04 08\chienstousedd\chiensdd\chienstouse2\chienstouse2\principal.cpp(29) : error C2248: 'CTabOrigines::~CTabOrigines' : cannot access private member declared in class 'CTabOrigines'
    sur cette ligne :

    Et ainsi de suite.

    Merci.

    beegees

  8. #8
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CTableauGenerique	TabOrigines((const CGenerique&)CTabOrigines());
    Salut,

    si tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CTabOrigines item;
    CTableauGenerique TabOrigines(item);
    Ca marche un peu mieux?

  9. #9
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2004
    Messages : 3 610
    Points : 1 315
    Points
    1 315
    Par défaut
    Citation Envoyé par coyotte507 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CTableauGenerique	TabOrigines((const CGenerique&)CTabOrigines());
    Salut,

    si tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CTabOrigines item;
    CTableauGenerique TabOrigines(item);
    Ca marche un peu mieux?
    Salut Coyotte,

    Merci pour ta réponse.

    Edit : Voici ce que j'ai fais :
    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
    20
    21
    22
    23
     
     
    		for (n=0; n < TabClassifications.Nombre(); n++)
    	{
    		printf("\n\nTableau des spécifications de \"chiens.txt\"\n");
    		((CTabClassifications&)TabClassifications.Element(n)).Afficher();
    	}
     
    	n=0;
     
     
    		CTableauGenerique	TabOrigines((const CGenerique&)CTabOrigines());
     
     
    		if (!Origines.Charger("chiens.txt"))printf("pas ok");
    		Origines.Trier();
    		TabOrigines.Ajouter(Origines);
     
    	for (n=0; n < TabOrigines.Nombre(); n++)
    	{
    		printf("\n\nTableau des origines \"chiens.txt\"\n");
    		((CTabOrigines&)TabOrigines.Element(n)).Afficher();
    	}
    Je n'ai maintenant plus que 6 erreurs, j'en avais 7 avant.
    J'attends tes news.

    Un tout grand meric pour le temps que tu consacres pour mes problèmes.

    Edit :

    Et bien là je ne comprends plus rien, j'étais persouadé d'avoir mis public: dans la classe COrigines et en repassant dessus, j'ai remarqué qu'il n'yavait pas le public:

    Désolé, bon, j'ai des nouvelles erreurs mais ça à l'air de marcher maintenant.

    Merci pour ton dévouement.


    beegees

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 31/07/2013, 12h25
  2. Réponses: 15
    Dernier message: 17/05/2013, 23h18
  3. Réponses: 10
    Dernier message: 21/11/2011, 00h47
  4. Réponses: 0
    Dernier message: 17/11/2011, 17h35
  5. je peux pas envoyer des emails via mon application
    Par scofild20 dans le forum Réseau
    Réponses: 7
    Dernier message: 20/10/2007, 23h54

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