0

より大きなコードのこのスニペットがあります。

    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      
}

コピー コンストラクターを作成し、オブジェクト Pizza1PizzaOrderCopyのコピーを作成しています。PizzaOrdersこれを自分のコードでビルドすると

PizzaOrdre pizzaorder = new PizzaOrder(); 

吐き出す

the constructor PizzaOrder is undefined

パラメータが必要になったためです。

私がそれをどのように見ているか(おそらく間違っている)はPizzaOrder Copy、単一のコピーでPizzaorderあり、単一のコピーです。なぜそれらが互いに影響を与えるのだろうか?私が考えることができる唯一の説明は、それらが何らかの方法で結合されているということです.

4

3 に答える 3

5

クラスにコンストラクターが定義されていない場合、Java コンパイラーはデフォルトのパラメーターなしのコンストラクターを提供します。クラスでコピーコンストラクターを定義したため、コンパイラーはパラメーターなしのコンストラクターを追加しません。したがって、これを行うと:

PizzaOrdre pizzaorder = new PizzaOrder(); 

未定義のパラメーターなしのコンストラクターを呼び出しているため、エラーが発生しています。したがって、ここで説明するように、PizzaOrdre クラスにパラメーターなしのコンストラクターを 1 つ追加するだけです。

public PizzaOrder(){}
于 2013-08-29T03:21:58.547 に答える
2

コンストラクタを追加する必要があります

public PizzaOrder()
{

}

コンストラクターを次のように使用します

PizzaOrder anotherPizzaOrder = new PizzaOrder();
...
PizzaOrder pizzorder = new PizzaOrder(anotherPizzaOrder);
于 2013-08-29T03:16:38.273 に答える
1

javac コンパイラーは、コンストラクターを定義しない場合にのみ、暗黙的な zero-parm コンストラクターを提供します。したがって、アレックスが述べたように、ゼロパームコンストラクターを定義する必要があります。

于 2013-08-29T03:20:03.003 に答える