gpt4 book ai didi

c++ - 装饰器设计模式,函数bug

转载 作者:可可西里 更新时间:2023-11-01 16:37:52 27 4
gpt4 key购买 nike

这是家庭作业...我不是在寻求答案,我只是遇到了一个错误,我不确定该如何处理。谢谢!

有问题的错误可能与作业本身无关,但无论如何这里是作业描述:

我正在做一项作业(用 C++ 编写),旨在通过带浇头的比萨饼的经典示例来教授装饰器设计模式的使用。 (我的教授也可能直接从 http://simplestcodings.com/2010/12/26/decorator-design-pattern-example-ni-c/ 中提取它)。我遇到了一个小问题,想知道是否有人可以帮助我。

我有一个主菜单(披萨店)对象,它接受用户的输入并对披萨执行所需的操作。用户从一个基本的披萨开始,然后可以在上面添加配料,直到吃完为止。因此,我的“newPizza”函数所做的第一件事就是将新 Pizza 声明为 Plain,它是抽象类 Pizza 的子类。

然后他们可以输入他们选择的配料。每次,指向同一个 Pizza 对象的指针都会被发送到 addToppings() 函数,添加新的装饰,然后返回指针。每个装饰都继承自一个价格类别,该类别继承自 pizzaToppings,后者继承自 Pizza

这是主要订单功能的相关部分:

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;
}

问题是,当我尝试将指针 currentPizza 发送到函数 addTopping() 时,我得到“运行时检查失败 #3 - 正在使用变量‘currentPizza’,但未进行初始化。”

我不是刚在第 7 行初始化它吗?

如果我点击“继续”,程序会继续运行,但每次调用该函数时都会出现同样的错误。这只是某处的语法错误,还是我这里有一些实际问题?

谢谢!!

[编辑:]

addTopping() 函数:

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;
}

最佳答案

您是否将 currentPizza 也声明为 Pizza 类的一个字段并且您正在其他地方使用它?如果是这样,您在 newPizza 中更新的 currentPizza 特定于该方法,您只需执行 currentPizza = new Plain();而不是在方法范围内声明一个新的 currentPizza 变量。

此外,在您的 addTopping 方法中,您仅更新参数 thisPizza,它是 指针<的拷贝/em> currentPizza

你需要做的:

currentPizza = addTopping(currentPizza);

关于c++ - 装饰器设计模式,函数bug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6291350/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com