[C con Clase] Error ejecucion - Patron Factory Method
Davidson, Steven
srd4121 en njit.edu
Lun Jun 1 17:35:35 CEST 2020
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> 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> 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 Cconclase Cconclase en listas.conclase.nethttp://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/10731c2d/attachment-0001.html>
Más información sobre la lista de distribución Cconclase