[C con Clase] Error ejecucion - Patron Factory Method

jesse jessesazo en yahoo.com
Lun Jun 1 18:27:00 CEST 2020


Steven

Muchas gracias :) . Este error no lo hubiera visto ni en dos vidas.

¡Ahora sí funciona!.


Jesse

On 1/6/20 17:35, Davidson, Steven wrote:
> Hola Jesse,
>
> Esta vez creé un proyecto nuevo y efectivamente hay un error. Creo que 
> la primera vez alteré algunas líneas de código sin darme cuenta y lo 
> di todo por bueno. Disculpe mi torpeza.
>
> El error está en 'PizzaFactory::createPizza()'. Escribe,
>
> ...
> case HamMushroom:
>             return unique_ptr<HamAndMushroomPizza>();
>
> Esto sólo crea el objeto 'unique_ptr<HamAndMushroomPizza>' pero no el 
> objeto 'HamAndMushroomPizza'. Esto se debe hacer explícitamente con 
> 'new' o si lo prefiere con la plantilla 'make_unique'. Esto es,
>
> return unique_ptr<HamAndMushroomPizza>( new HamAndMushroomPizza );
>
> O con 'make_unique',
>
> return unique_ptr<HamAndMushroomPizza>( 
> std::make_unique<HamAndMushroomPizza>() );
>
> Ahora el objeto 'unique_ptr<HamAndMushroomPizza>' apunta a un objeto 
> instanciado con memoria dinámicamente adjudicada.
>
> Debería realizar este cambio similar a los otros casos para crear 
> objetos de las otras dos clases.
>
>
> Espero que ahora sí funcione todo.
>
> Steven
>
>
> On Tue, May 26, 2020 at 3:22 PM jesse <jessesazo en yahoo.com 
> <mailto:jessesazo en yahoo.com>> wrote:
>
>     Gracias Steven
>
>     Pero no funciona, a lo mejor es algo que tengo que modificar en el
>     Eclipse
>
>     El mensaje de error es el siguiente
>
>     $ ./udemy-pdd
>     Segmentation fault (core dumped)
>
>     Y el error ocurre justo en el cout de pizza->getPrice();
>
>     void pizza_information(PizzaFactory::enumPizzaType ept)
>     {
>         unique_ptr<IPizza> pizza = PizzaFactory::createPizza(ept);
>
>         cout << "Price of " << ept ;
>         cout << " is " << pizza->getPrice();
>         cout << std::endl;
>     }
>
>     Gracias, again, por tu ayuda
>
>     Jesse
>
>     On 25/5/20 18:59, Davidson, Steven wrote:
>>     Hola Jesse,
>>
>>     Creé mi propio código de ejemplo para probar el código
>>     presentado. No tuve muchos problemas. Luego, usé sus códigos
>>     fuente sin problemas. Intente recompilar todo el proyecto y si lo
>>     está haciendo para la versión de depuración (debug), cambie a la
>>     versión de lanzamiento (release).
>>
>>     Espero que esto ayude.
>>
>>     Steven
>>
>>
>>     On Mon, May 25, 2020 at 10:26 AM jesse <jessesazo en yahoo.com
>>     <mailto:jessesazo en yahoo.com>> wrote:
>>
>>         Buenas a todos
>>
>>         Estoy probando patrones. Estoy con el de creacion Factory
>>         Method y tengo
>>         un error
>>
>>         Tengo la siguiente estructura
>>
>>         IPizza <== PizzaFactory --> udemy-pddcl
>>         +-> DeluxePizza
>>         +-> HamAndMushroomPizza
>>         +-> HawaiianPizza
>>
>>         He creado una clase virtual / interface: IPizza
>>
>>         #ifndef IPIZZA_H_
>>         #define IPIZZA_H_
>>         class IPizza {
>>         public:
>>               IPizza();
>>               virtual ~IPizza();
>>               virtual int getPrice() const = 0;
>>         };
>>         #endif /* IPIZZA_H_ */
>>
>>         Esta interface es implementada por Deluxe, Hawaiian y
>>         HamMushroom Pizza,
>>         modificando el comportamiento en el metodo getPrice
>>
>>         La clase PizzaFactory crea objetos de lo mencionado
>>         anteriormente, en
>>         funcion al parametro enumPizzaType
>>
>>         class PizzaFactory {
>>         public:
>>               enum enumPizzaType {
>>                   HamMushroom,
>>                   Deluxe,
>>                   Hawaiian
>>               };
>>               static unique_ptr<IPizza> createPizza(enumPizzaType ept) ;
>>         };
>>
>>         Pero cuando se invoca a la creacion del tipo de pizza, la
>>         linea del cout
>>         que esta comentada, arroja un error del tipo "Segmentation
>>         fault (core
>>         dumped)"
>>
>>         void creFactMeth_Pizza(PizzaFactory::enumPizzaType ept)
>>         {
>>               unique_ptr<IPizza> pizza;    // defino el objeto pizza
>>               pizza = PizzaFactory::createPizza(ept); // dependiendo de
>>         parametro ept creo el tipo de piza
>>
>>               cout << "Price of " << ept ; ok
>>               //cout << " is " << pizza->getPrice();<<-- Error
>>               cout << std::endl;
>>         }
>>
>>         Agradecere mucho si alguien me puede ayudar.
>>
>>         Uso Eclipse y CLion sobre linux. Adjunto fuentes
>>
>>
>>         Att
>>
>>         Jesse
>>
>>
>>     _______________________________________________
>>     Lista de correo CconclaseCconclase en listas.conclase.net  <mailto:Cconclase en listas.conclase.net>
>>     http://mail.listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>>     Bajas:http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>     _______________________________________________
>     Lista de correo Cconclase Cconclase en listas.conclase.net
>     <mailto:Cconclase en listas.conclase.net>
>     http://mail.listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>     Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://mail.listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20200601/ab93469d/attachment-0001.html>


Más información sobre la lista de distribución Cconclase