Esto es tarea ... No estoy pidiendo respuestas, solo tengo un error que no estoy seguro de qué hacer. ¡Gracias!Patrón de diseño de decorador, error de función
El fallo en cuestión probablemente no tiene nada que ver con la propia asignación, pero en este caso es la descripción de la tarea de todos modos:
Estoy trabajando en una asignación (en C++) destinado a enseñar el uso del diseño decorador patrón a través del clásico ejemplo de una pizza con coberturas. (Mi profesor también podría haberlo levantado directamente desde http://simplestcodings.com/2010/12/26/decorator-design-pattern-example-ni-c/). Me encuentro con un pequeño problema que me preguntaba si alguien podría ayudarme.
Tengo un objeto del menú principal (pizzeria) que toma la entrada del usuario y realiza las acciones deseadas en una pizza. Los usuarios comienzan con una pizza básica y luego pueden agregarle los ingredientes hasta que estén listos. Entonces, lo primero que hace mi función "newPizza" es declarar la nueva pizza como Plain
, que es una subclase de la clase abstracta Pizza
.
Luego, ingresan a su elección de coberturas. Cada vez, se envía un puntero al mismo objeto Pizza
a la función addToppings()
, se agrega la nueva decoración y se devuelve el puntero. Cada decoración hereda de una categoría de precio, que hereda de pizzaToppings
, que hereda de Pizza
.
Ésta es la parte pertinente de la función principal orden:
Pizza* Menu::newPizza()
{
cout << "\nNew Pizza";
//accept the next choice
int choose = 0;
//create the new pizza
Plain * currentPizza = new Plain();
//until they choose to end the order
while (choose != 3)
{
//accept the choice
cin >> choose;
switch (choose)
{
//if they want to add a new topping
case 1:
{
//add topping to current pizza
//and this is where the problem is spotted by the compiler
addTopping(currentPizza);
break;
}
El problema es que cuando intento enviar el puntero currentPizza
a la función addTopping()
, consigo "Run-Time Check Fracaso # 3 - La variable 'actualPizza' se está utilizando sin inicializar. "
¿No acabo de inicializarlo justo en la línea 7?
Si toco "continuar", el programa continúa y funciona, pero recibo el mismo error cada vez que llamo a la función. ¿Es solo un error de sintaxis en alguna parte, o tengo algún problema real aquí?
Gracias!
[editar:]
El addTopping función():
Pizza* Menu::addTopping(Pizza* thisPizza)
{
cout << "\nAdd topping";
//declare choose int
int choose = 0;
//accept number of topping
cin >> choose;
//decide which one to add
switch (choose)
{
//mozzarella
case 1:
{
thisPizza = new Mozzarella(thisPizza);
break;
}
//mushrooms
case 2:
{
thisPizza = new Mushrooms(thisPizza);
break;
}
//another 13 possible toppings, won't bore you with the details ;)
}
cout << "\nEnd add topping\n";
return thisPizza;
}
¿Cuál es la implementación de addTopping()? podría ser relevante – Simone
¿La clase 'Plain' tiene algunas variables miembro POD que no se están inicializando? –
@Chris, no todo lo que tiene está en su constructor – BIU