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 :

Erreur "no match"


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Par défaut Erreur "no match"
    Voila j'essaie de faire une class vecteur mais j'ai deux erreurs dans mon code !

    55 no match for 'operator[]' in 'v[i]'
    In member function `void vecteur::affiche()':

    `p' undeclared (first use this function)

    Voici mon code fichier.cpp:

    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
     
    using namespace std;
     
    class vecteur
    {
    private :
    	int m_size; 
    	double * m_p;
     
    public :
    	vecteur();
    	vecteur( int);
    	vecteur( const vecteur & v);
    	~vecteur();
     
    	void affiche();
    };
     
    vecteur :: vecteur()
    {
    	m_size = 0;
    	m_p = NULL;// Important car si ce n'est pas fait, ça plantera dans ton destructeur
    }
     
    vecteur :: vecteur( int taille)
    {
    	m_size = taille;
     
    	if (m_size > 0)
    	{
    		m_p = new double[m_size];// Tu avais fait une erreur ici : taille=m_size
     
    		for (int i = 0 ; i < m_size ; i++)
    		{
    			m_p[i] = 0;
    		}
    	}
    	else
    	{
    		m_size = 0;
    		m_p = NULL;
    	}
    }
     
     
    vecteur :: vecteur(const  vecteur& v)
    {
    	m_size = v.m_size;
     
    	if (m_size > 0)
    	{
    		m_p = new double[m_size];
     
    		for (int i = 0 ; i < m_size ; i++)
    		{
    			m_p[i] = v[i];
    		}
    	}
    	else
    	{
    		m_size = 0;
    		m_p = NULL;
    	}
    }
     
    vecteur :: ~vecteur()
    {
    	delete [] m_p;
    }
     
    void vecteur :: affiche()
    {
    	for (int i = 0 ; i < m_size ; i++)
    	{
    		cout << p[i] << ";";
    	}
     
    	cout << "\n";
    }

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 23
    Par défaut
    Salut,

    remplace p[i] par m_p[i]...

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Au passage: Pour bien faire, affiche() devrait être déclarée comme fonction membre const et le constructeur qui prend un int en paramètre devrait être déclaré explicit.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Par défaut
    Merci pour ces éléments de réponses mais je comprends pas l'erreur à la ligne 55

    55 no match for 'operator[]' in 'v[i]'

    le compilateur ne comprend pas []?

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par zopet Voir le message
    Merci pour ces éléments de réponses mais je comprends pas l'erreur à la ligne 55

    55 no match for 'operator[]' in 'v[i]'

    le compilateur ne comprend pas []?
    Pas s'il n'est pas défini. Il l'est automatiquement pour les pointeurs et pour les tableaux, mais pas pour les autres types : il faut alors le déclarer de manière explicite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class vecteur
    {
    public:
      ...
      double operator[](std::size_t index) const
      {
        return m_p[i];
      }
      double& operator[](std::size_t index)
      {
        return m_p[i];
      }
    }
    Les deux fonctions sont (plus ou moins) obligatoires (moins si tu programmes méchamment et que tu t'autorise des effets de bord étranges ; plus si tu souhaites faire les choses correctement) . La version const sera utilisée lorsque tu écrira x = v[i]; la version non-const sera utilisée lorsque tu écriras v[i] = x;
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

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

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