[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