2011-01-28 5 views
0

J'ai besoin de quelqu'un pour me montrer ce qui ne va pas avec ce code. Je ne sais pas ce qui ne va pas. Je sais que le code ne fait rien de significatif et ne peut pas être utilisé. Je l'ai créé seulement pour savoir comment fonctionnent les constructeurs de copies.Erreur de constructeur de copie

class test 
{ 
    public: 

    int* value; 

    public: 

    int getvalue() 
    {return *value;}; 

    test(int x){ value = new int(x);}; 

    test(const test& a) 
    { 
     value=new int; 

     *value = a.getvalue(); 
    }; 
}; 
+2

Voulez-vous vraiment utiliser des pointeurs? –

Répondre

2

Vous devez modifier la déclaration de getvalue()-int getvalue() const, puisque vous essayez d'appeler getvalue() sur une référence const dans votre constructeur de copie.

1

Il y a un parasite; après chaque définition de méthode, elle ne sera pas compilée.

class test { public: 

int* value; 

public: 

int getvalue() 
{return *value;} 

test(int x){ value= new int(x);} 

test(const test& a) 
{ 
    value=new int; 

    *value = a.getvalue(); 
} 


}; 

De même, j'éviterais 'test' comme nom de classe; en fonction de votre plate-forme si cela peut être une macro ou un autre nom in-scpe. Utilisez "MyTest" ou somesuch.

+0

La solution déclarait getvalue() en tant que fonction membre const. mais merci je sais que je mets beaucoup d'extra; dans mon code. : D: D –

0

Il a été longtemps depuis ma dernière lettre C++, mais voilà:

Je ne sais pas pourquoi vous déclarez la valeur d'être un pointeur int; Voulais-tu en faire un int?

class test 
{ 
    private: 

     int value; 

    public: 

     test(int x) 
     { 
      value = new int(x); 
     } 

     int getValue() 
     { 
      return value; 
     } 

     test(const test & a) 
     { 
      value = a.getValue(); 
     } 
}; 
+0

Ensuite, sortez le nouveau. –

+0

Je sais que mon code ne fait rien mais c'est à des fins d'apprentissage. cette ligne "int = new int (x)" ne sera pas compilée. Je vous remercie. –

0

(Affiché au nom de l'OP).

J'ai essayé de faire la fonction getvalue() const et cela a fonctionné. Le problème était que je passais la classe de test comme une référence const et parce que je n'ai pas déclaré la fonction getvalue() const le compilateur pensait que la fonction allait changer quelque chose dans cette référence.

Questions connexes