Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使数组包含从基类继承的类_C++_Class_Inheritance_Polymorphism - Fatal编程技术网

C++ 如何使数组包含从基类继承的类

C++ 如何使数组包含从基类继承的类,c++,class,inheritance,polymorphism,C++,Class,Inheritance,Polymorphism,我有下一个课程,我有4门课: 蛋糕、馅饼、咸点心、冰淇淋和甜点以及所有这些类别的基本类别: 卡克里。 我需要使数组包含从CBakery继承的类,例如,我尝试了: CBakery *bought[6]; //Bought food Cake cake; cake.InputCake(); //To fill it with input bought[1] = new Cake; bought[1] = cake; 但是它不起作用,下面是完整的代码,如果你能帮助我,我将非常感激 编辑: #包括

我有下一个课程,我有4门课: 蛋糕、馅饼、咸点心、冰淇淋和甜点以及所有这些类别的基本类别: 卡克里。 我需要使数组包含从CBakery继承的类,例如,我尝试了:

CBakery *bought[6]; //Bought food 

Cake cake;
cake.InputCake(); //To fill it with input
bought[1] = new Cake;
bought[1] = cake;
但是它不起作用,下面是完整的代码,如果你能帮助我,我将非常感激

编辑:

#包括“stdafx.h”
#包括
使用名称空间std;
B类蛋糕
{
公众:
虚空f(void);
虚拟空输入()
{
int冻结;
cout>ProductName>>ProductType;
cin>>产品价格;
cin>>冷冻;
如果(冻结==1)
freezable=true;
其他的
freezable=false;
cin>>到期时间;
}
虚拟无效显示(无效){

cout由于您没有说明您的程序有哪些地方不起作用,因此我随机选取一个部分,并显示一个可能的错误:

        Cake cake;
        cake.InputCake();
        bought[i] = new Cake;
这段代码将创建一个名为
Cake
的本地
Cake
对象,在其上调用
InputCake
方法,然后将一个类型为
Cake
的完全不同的、新的、动态分配的对象插入
bunded[i]

请尝试以下方法:

case 1:
{
    Cake * cake = new Cake;
    cake->Input();
    bought[i] = cake;
    break;
}

实际上初始化并插入同一个对象。

解释“它不工作”它不编译吗?你试过“买[1]=&cake;”吗?还有。cake是一种CBakery吗?如果不是,请不要说你使用继承错误。为什么不使用
std::vector
而不是处理固定大小的数组(和指针!)?@crashmstr对象切片可能会发生。您需要为多态性提供额外的间接寻址。如果愿意,您可以使用智能指针进行间接寻址。谢谢,我将它们称为所有输入,并修复了行类Cake:CBakery,并添加了公共。但现在它告诉我:“错误1错误LNK2001:未解析的外部符号”public:virtualvoid u thiscall CBakery::f(void)“(?)?f@CBakery@@UAEXXZ)“您需要什么
虚拟void f()
不管怎样,如果它似乎没有被调用?而且你没有它的实现,这就是编译器在这里抱怨的错误。是的,谢谢,这是我忘记删除的东西,其他的,当它到达cake->Input();它不要求任何输入(它只是循环输入)试着用调试器一步一步地完成它。我认为更可能的是,你的开关案例1甚至没有被输入。它还说:错误1错误C2360:“蛋糕”的初始化被“案例”标签跳过。
case 1:
{
    Cake * cake = new Cake;
    cake->Input();
    bought[i] = cake;
    break;
}