La Conversion des données à partir d'un type de classe à un autre type de classe

J'ai essayé de convertir un type de classe de données à un autre type de classe donc j'étais en utilisant l'opérateur de coulée méthode dans mon oops programme en c++.

class example2;
class example1
{
   int id;
   int numbers;
   int cost;
public:
   example1(int a, int b, int c)
   {
     id=a;
     numbers=b;
     cost=c;
   }

//getid() added here
//getnumber() added here
//getcost() added here

   operator example2()
   {
    example2 temp;
    temp.id=id;
    temp.value=numbers*cost;
    return temp;
   }
};
class example2
{
   int id;
   int value;
public:
   example2(int x,int y){
     id=x;
     value=y;
   }
  void display(){
    cout<<"id "<<id<<endl;
    cout<<"value "<<value<<endl;
  }
};

quand j'ai été en utilisant la conversion de exemple1 à exemple2. Il montre l'erreur.

int main()
{
  example1 s1(100,5,140.0);
  example2 s2;
  s2=s1;
  s2.display();
  return 0;
}

c'est de donner à l'erreur, mais pourquoi?. J'ai fait un opérateur de surcharger une fonction membre dans exemple1 classe parce que l'objet de exemple1 doit être changé en objet de exemple2.De sorte que cette fonction appelée à partir de la classe exemple1 de la méthode qui, je pense.Il doit être correct

D'erreur était:

erreur: le type de retour de la classe de exemple2 " est incomplète et
exemple2 temp; a incomplète de type

En quelque sorte, j'ai résolu d'une autre façon, j'ai ajouté un constructeur en exemple2 côté de classe:

example2(example1 e)
{
  id=e.getid(); //these functions already added in my code i didnt mentioned them in here.
  value=e.getnumber()*e.getcost();
}

et de faire des commentaires de 'l'opérateur exemple2 ()" dans exemple1.
maintenant, il est de travail.
Mais la manière n'était pas de l'accepter. Merci de m'aider à me corriger dans mon précédent façon de faire cette chose.

  • Le message d'erreur vous indique que vous avez besoin de plus que juste une déclaration anticipée de example2 au moment où vous avez example1 dans le code.
  • Je ne vois pas un seul tenant n'importe où dans le programme.
  • C'est la conversion d'un type classe de données à un autre type de classe de données.Je l'ai utilisé à partir de s2=s1.
  • Je veux que ce problème est résolu à partir de seulement une classe à l'opérateur qui ne prend aucun paramètre et ne retourne rien
  • Non, s2=s1 est juste l'attribution, en essayant de stuff s1 dans s2 et que peut ou mnay ne pas fonctionner selon les types de s2 et s1. Un casting change temporairement le type de données, vous permettant de traiter exemple2 comme un exemple1 et dans ce cas va dans le mur comme il n'y a pas de relation entre exemple2 et exemple1.
  • s2=s1 est l'attribution, mais il est d'appeler une fonction membre "de l'opérateur exemple2() "parce que s1 est exemple1 objet et je suis de l'affecter dans exemple2 objet s2.qui est comme exemple2 s2=exemple2(s1); ou exemple2 s2=s1; ici, l'opérateur sera invoquée par s1
  • Non, il n'est pas. s2=s1 est l'appel de l'opérateur=. Si vous voulez appeler votre fonte de surcharge, et vous ne le faites pas, il serait fait comme ceci: (example2)s1.

InformationsquelleAutor Aman Kaushal | 2015-07-18