gpt4 book ai didi

c++ - 使用 -> 从对象索引数组访问虚函数

转载 作者:行者123 更新时间:2023-11-28 01:05:18 25 4
gpt4 key购买 nike

我目前正在编写一个专注于继承属性的 C++ 作业。

有一个基类 gun{} 和几个派生类:

手枪:公用枪{}

左轮手枪:公共(public)手枪{}

手枪:公共(public)手枪{}

根据当前的任务,我为每个类添加了一个虚拟函数print(),它覆盖了前一个类的print(),添加要打印的唯一变量。例如,枪有string manufacturer,手枪有string grips,手枪有bool semiauto

现在,我的教授要我制作一个包含 2(两个)对象的数组,一个类型为revolver: public handgun 的对象和一个类型为pistol: public handgun

在作业中,他说我们必须使用这个确切的代码来打印出数组的内容:

for(int i=0; i <= numGuns; i++)
**gunCabinet[i]->print();**

现在,我的代码。有问题的错误在底部附近以粗体显示。

int main() {
//declares the revolver and pistol objects
revolver Anaconda;
pistol M9;

//sets appropriate variables for the objects
Anaconda.setManufacturer("Smith & Wesson");
M9.setManufacturer("Beretta");
Anaconda.setCaliber(".44 special");
M9.setCaliber("9x19mm Parabellum");
Anaconda.setGrips("Hogue grips");
M9.setGrips("U.S. Military specification grips");
Anaconda.setSights("6x scope");
M9.setSights("U.S. Military specification iron sights");
Anaconda.setLaser(true);
M9.setLaser(false);
Anaconda.setSingleAction(true);
Anaconda.setNumberOfRounds(6);
M9.setSemiAuto(true);

int numGuns = 2;

gun* gunCabinet;
gunCabinet = new gun[numGuns];
gunCabinet[0] = Anaconda;
gunCabinet[1] = M9;

// *(gunCabinet) = Anaconda;
//*(gunCabinet + 1) = M9;



//gun * gunCabinet[/*numGuns*/2] = {&Anaconda, &M9};




for(int i=0; i <= numGuns; i++)
**gunCabinet[i]->print(); //ERROR ON THIS LINE**

//cout << Anaconda << endl;
//Anaconda.print();
//cout << M9 << endl;
//M9.print();


return 0;
}

我已经注释掉了我为完成这项工作所做的其他尝试。

现在,当我运行它时,我收到一条错误消息“‘->’的基操作数具有非指针类型‘gun’”。

除非我的教授犯了错误,否则我认为这一切都是我的。问题是,我不知道我做错了什么。我不一定是在寻找作业的答案,而是他的代码有效吗?如果它是有效的,我可以就我做错了什么提出一些建议(没有双关语)吗?非常感谢!

最佳答案

您将 gunCabinet 创建为 gun 对象数组,但您真正想要的是 gun* 数组(gun 指针)。

gun* gunCabinet[2];
gunCabinet[0] = &Anaconda;
gunCabinet[1] = &M9;

关于c++ - 使用 -> 从对象索引数组访问虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6510176/

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