2009-12-11 5 views
1

qu'est-ce que ce message d'erreur signifie: erreur C2662: « addDoctor »: ne peut pas convertir pointeur « this » de « Clinique de classe const » à « Clinique de classe & » Je ne suis pas en utilisant const siconst message d'erreur

désolé, mais c'est ma première expérience d'affichage de temps

Clinic.h

class Clinic{ 
    public: 
     Clinic(); 
     int addDoctor(Doctor*); 
    private: 
     Doctor doctors[10]; 
     int d; 
    }; 

Clinic.cpp

Clinic::Clinic() 
    {d=-1;} 
int Clinic::addDoctor(Doctor *x) 
    {d++;doctors[d]=x;return d;} 
+0

affichage du code pourrait aider. –

+0

s'il y a un moyen de télécharger le fichier source qui serait utile, mais je suis nouveau ici, je ne sais pas comment l'afficher .Donc si quelqu'un sait me faire savoir –

+0

Il suffit d'insérer l'extrait de code dans la question et formater useing le bouton "code" sur la barre d'outils. – sharptooth

Répondre

1

Cela signifie que vous essayez d'appeler la fonction de membre non-const addDoctor d'une fonction membre const.

EDIT: Dans le code nouvellement affiché, vous disposez d'un tableau d'objets Doctor mais vous essayez de placer un pointeur dans ce tableau. Cela donnera une erreur comme ne peut pas convertir Doctor* à Doctor

+0

merci.qui a été le problème –

+1

mais le code posté a un problème totalement différent .. – Naveen

3

Vous avez un objet const et que vous essayez d'appeler la fonction non membre de const. Toutes les erreurs sont documented.

2

Cela signifie que vous appelez addDoctor sur un const cela sans l'appel de fonction étant un const.

La variable que vous appelez addDoctor sur les besoins de ne pas être const.

Edit: Une fonction membre const ressemble à ceci:

class MyClass 
{ 
public: 
    void MyNonConstFunction(); 
    void MyConstFunction() const; 
}; 

const garantit que vous ne changez rien à l'intérieur de la classe. Je suppose qu'avec addDoctor ce n'est pas le cas.

Très probablement, vous avez quelque chose comme

const Object obj; 
obj.addDoctor(); 

Ceci brisera. Si vous faites:

Object obj; 
obj.addDoctor(); 

Les choses vont fonctionner. Bien sûr, cela devient plus complexe si vous l'appelez sur le retour const d'une fonction. Si c'est le cas, vous devez obtenir cet objet différemment.

+0

c'est le problème. L'objet que j'utilise n'est pas const. pour être plus clair un tableau d'objets en tant que membre de la classe qui contient cette méthode –

+0

comme vous l'avez dit la méthode ici n'est pas const c'est vrai mais l'objet est proche de cette classe certains { private Doctor tableau [10 ] public addidoctor (Doctor) }; void main() { Docteur x; array.addDoctor (x); } –

+0

Eh bien cela n'a pas beaucoup de sens ... parce que le tableau n'est pas const ... – Goz

0

MSDN exemple

// C2662.cpp 
class C { 
public: 
    void func1(); 
    void func2() const{} 
} const c; 

int main() { 
    c.func1(); // C2662 
    c.func2(); // OK 
}