这是家庭作业...我不是要答案,只是有一个我不确定该怎么做的错误。谢谢!

有问题的bug可能与任务本身无关,但是无论如何这是任务描述:

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

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

然后,他们可以输入自己选择的浇头。每次,将指向相同Pizza对象的指针发送到addToppings()函数,添加新修饰,并返回该指针。每个装饰都从价格类别继承,而价格类别从pizzaToppings继承,而PizzacurrentPizza继承。

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

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

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

我不是刚刚在第7行上对其进行了初始化吗?

如果我单击“continue”,该程序将继续运行并运行,但是每次调用该函数时都会遇到相同的错误。它只是某个地方的语法错误,还是我这里有一些实际问题?

谢谢!!

[编辑:]

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类的字段,并且正在其他地方使用它?如果是这样,则您要在currentPizza中更新的newPizza特定于该方法,您只需要执行currentPizza = new Plain();即可,而不是在方法范围内声明新的currentPizza变量。

同样,在addTopping方法中,您仅更新参数thisPizza,它是指针currentPizza的副本。

您需要做:

currentPizza = addTopping(currentPizza);

08-26 19:48