c++ 指向基类对象的指针数组[关闭]

6ojccjat  于 2023-05-30  发布在  其他
关注(0)|答案(1)|浏览(139)

**关闭。**此题需要debugging details。目前不接受答复。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
昨天关门了。
Improve this question
我必须写一个程序,必须包含指向基类对象的指针数组。基类“Order”仅包含虚函数“displayOrderDetails()”。派生类:FoodOrder、DrinkOrder、DessertOrder包含食物的名称、数量和displayOrderDetails()函数。然后,我创建了3个表与3个客户每个订单。这是我的主.cpp:

#include <iostream>
#include "Order.h"
#include "FoodOrder.h"
#include "DrinkOrder.h"
#include "DessertOrder.h"

using namespace std;

int main()
{
 const int tables = 3;
 const int guests =3 ;
 Order*** orders= new Order**[tables];

  for (int i = 0; i < tables; i++) {
        orders[i] = new Order*[guests];
        for (int j=0; j < guests;j++) {
            orders[i][j] = new Order*[3];
        }

    }

  //Table 1
    orders[0][0][0] = new FoodOrder("Bigos", 1);
    orders[0][1][1] = new DrinkOrder("Herbata", 2);
    orders[0][2][2] = new DessertOrder("Kremowka", 3);

    // Table 2
    orders[1][0][0]= new FoodOrder("Zalewajka", 1);
    orders[1][1][1]= new DrinkOrder("Kompot", 1);
    orders[1][2][2]= new DessertOrder("W-Z", 2);

    // Table 3
    orders[2][0] [0]= new FoodOrder("Schabowy", 2);
    orders[2][1] [1]= new DrinkOrder("Lorneta", 1);
    orders[2][2] [2]= new DessertOrder("Galareta", 3);

 for (int i = 0; i < tables; i++) {
        for (int j = 0; j < guests; j++) {
            for (int k = 0; k < 3; k++) {
                if (orders[i][j][k] != nullptr) {
                    orders[i][j][k]->displayOrderDetails();
                }
            }
        }
    }

    for (int i = 0; i < tables; i++) {
        for (int j = 0; j < guests; j++) {
            for (int k = 0; k < 3; k++) {
                delete orders[i][j][k];
            }
            delete[] orders[i][j];
        }
        delete[] orders[i];
    }
    delete[] orders;

    return 0;
}

我在line中有一个错误:[i][j] = new Order*[3];:无法在分配中将“Order**”转换为“Order*”|我希望有人能帮助我纠正它或建议其他解决方案。

ulmd4ohb

ulmd4ohb1#

orders[i][j] = new Order*[3]应该是orders[i][j] = new Order[3],因为数组已经算作指针。new Order*[3]表示指向一个指针(两个指针)的指针,而orders[i][j]的值只是一个指针(因为它有两个指针深,你使用的指针总数是3)。

相关问题