2013-08-29 2 views
0

J'ai cet extrait de mon code plus grand;Constructeurs de copie Conflit?

public PizzaOrder(PizzaOrder PizzaOrderCopy) 
    { 
     this.pizza1 = PizzaOrderCopy.pizza1; 
    } 
    /** 
    * @param args 
    */ 
    public static void main(String[] args) 
    { 
     // TODO Auto-generated method stub 
     PizzaOrder pizzorder = new PizzaOrder(); 

     pizzorder.setNumPizza(1); 
     pizzorder.setPizza1("small",1,1,1); 
     pizzorder.setPizza2("medium",3,6,4); 
     pizzorder.setPizza3("large",2,4,4); 
     pizzorder.getpizza1info(); 
     pizzorder.getpizza2info(); 
     pizzorder.getpizza3info(); 
     pizzorder.calcTotal(); 

    } 
     // TODO Auto-generated method stub  
} 

Je fais un constructeur de copie PizzaOrderCopy et de faire une copie de PizzaOrders objet Pizza1. Quand je construis mon code ce

PizzaOrdre pizzaorder = new PizzaOrder(); 

spazzes sur

the constructor PizzaOrder is undefined 

parce qu'il veut maintenant un paramètre. Comment je le vois (le plus probablement faux) PizzaOrder Copy est une copie unique et Pizzaorder est une copie simple. alors je me demande pourquoi ils s'influencent mutuellement? La seule explication que je peux penser est qu'ils sont joints d'une certaine manière.

+1

Vous n'utilisez même pas * votre constructeur de copie. – Makoto

+1

vous utilisez votre constructeur par défaut, dans ce cas il n'existe pas car vous avez défini votre propre constructeur. Créez un constructeur sans arguments et cela devrait fonctionner. –

Répondre

5

Le compilateur Java fournit un constructeur par défaut sans paramètre lorsqu'il n'y a pas de constructeur défini dans la classe. Comme vous avez défini un constructeur de copie dans votre classe, le compilateur n'ajoutera pas le constructeur no-param. Et donc quand vous faites ceci:

PizzaOrdre pizzaorder = new PizzaOrder(); 

vous appelez le constructeur sans paramètre non défini, ce qui est à l'origine de l'erreur. Il vous suffit donc d'ajouter un constructeur no-param dans votre classe PizzaOrdre comme indiqué ci-dessous:

public PizzaOrder(){} 
+2

Ok merci, c'est la première fois que j'ai besoin d'utiliser plus d'un constructeur: 3 – BenniMcBeno

2

Vous devez ajouter constructeur

public PizzaOrder() 
{ 

} 

et utilisez votre constructeur comme

PizzaOrder anotherPizzaOrder = new PizzaOrder(); 
... 
PizzaOrder pizzorder = new PizzaOrder(anotherPizzaOrder); 
+1

Peut-être que vous souhaitez indiquer explicitement le problème. La raison en est que le ctor par défaut n'est généré que s'il n'y a pas de sous-programme défini par l'utilisateur. – Antimony

1

Le compilateur javac ne fournit qu'un constructeur zéro parm implicite si vous ne définissez pas de constructeurs. Donc, vous devez définir le constructeur zéro-parm comme indiqué par Alex.

Questions connexes