装饰设计模式,功能bug

BIU*_*BIU 9 c++ initialization class decorator

这是家庭作业......我不是要求答案,我只是有一个错误,我不知道该怎么办.谢谢!

有问题的bug可能与赋值本身无关,但这里仍然是赋值说明:

我正在进行一项任务(在C++中),旨在通过披萨与浇头的经典例子来教授使用装饰设计模式.(我的教授也可以从http://simplestcodings.com/2010/12/26/decorator-design-pattern-example-ni-c/直接解除它.我遇到了一个小问题,我想知道是否有人可以帮助我.

我有一个主菜单(比萨店)对象,它从用户那里获取输入并在披萨上执行所需的操作.用户从一个基本披萨开始,然后可以添加配料,直到它们完成.所以我的"newPizza"函数所做的第一件事是将新的Pizza声明为a 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;
        }
Run Code Online (Sandbox Code Playgroud)

问题是当我尝试将指针发送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;
}
Run Code Online (Sandbox Code Playgroud)

MGw*_*nne 6

你是否已经currentPizza宣布为Pizza班级的一个领域而你正在其他地方使用它?如果是这样,currentPizza您正在更新的newPizza是特定于该方法的,并且您需要执行currentPizza = new Plain();而不是currentPizza在方法范围内声明新变量.

此外,在你的addTopping方法,你只更新的说法thisPizza,这是一个复制的的指针 currentPizza.

你需要这样做:

currentPizza = addTopping(currentPizza);
Run Code Online (Sandbox Code Playgroud)