这是我的功能:
void Gladiator::display()
{
cout << name << ":\nHealth: " << curHealth << '/' << maxHealth <<
"\nEvasion: " << evasion << "\nCritical: " << critical <<
"\nDamage: " << dmgMin << '-' << dmgMin + dmgRange + 1 << "\n\n";
}
我需要帮助我的语法来显示上面函数的统计数据,以及我为蓝色和红色团队创建Gladiators矢量的语法是否正确?非常感谢 .
cout << "A battle will soon commence... First the Teams must be created." << endl;
vector<Gladiator> redTeam; // is the syntax correct for this one too?
vector<Gladiator> blueTeam;
cout << "Red Team's Stats: " << endl;
Gladiator.display(redTeam); //this is the part where I don't know the syntax of displaying the stats for redTeam vector.
cout << "Blue Team's Stats: " << endl;
blueTeam.display(); //syntax for this is wrong too.
4 回答
关于
Gladiator.display(redTeam);
:不,display
不接受参数,也不接受 . 这是一个显示一个Gladiator
的统计数据的功能,理想情况下,它应该与角斗士争夺的团队无关 .相反,创建一个
Team
类来保存Gladiator的向量并向其添加一个display
成员函数,它循环通过所有角斗士并调用它们的display
函数 .当你以后想要添加用于打击另一个团队的功能时,
Team
类也会派上用场 . 然后Team
类中的Fight
函数将调用其包含的Gladiator上的Fight
函数 .两个
display
函数都可以组成流操作符,以便与标准流无缝集成,以便您可以这样做:这里's an example where I'已经用流操作符替换了
display
函数,因为随机性可能是战斗的重要部分,我也添加了<random>
库的示例用法以及如何在两个类中实现Fight
函数的示例 .你有一种误解 . 函数
Gladiator::Display()
是类Gladiator
的成员函数 . 该函数不接受任何参数,因此您无法按原样调用它 .我建议你寻找
function overloading
和static
函数,因为它们可以帮助你理解你需要做什么 .我会添加一个
static
函数Galdiator::Display(const std::vector<Gladiator>& team)
,如下所示:Gladiator.h
Gladiator.cpp
然后你就可以称之为:
请注意,不能像_47582中那样使用
extension methods
,您可以使用静态类扩展现有类 . 因此,无法致电:由于
blueTeam
是std::vector
,它不包含函数Display()
.但是,您可以使用流操作符重载和重载
std::ostream
来解决方法,使其接受std::vector<Gladiator>
并显示它 . 我不建议你深入研究这个问题,因为问题表明在一些基础知识方面缺乏知识 .无论如何,这个:
如果
Gladiator
存在默认构造函数,则完全有效 . 如果你想给它一个尺寸,你可以使用:这将在其中创建一个带有
10
Gladiators的向量 . 请注意,这仅在IFGladiator
具有默认构造函数Gladiator::Gladiator()
时才有效 . 如果您创建了另一个构造函数,编译器将不会自动生成默认构造函数 .希望这可以帮助 .
https://en.cppreference.com/w/cpp/container/vector
有关详细信息,请参阅以下内容
How can I create objects while adding them into a vector?
首先,虽然语法有效,但此处的向量为空:
因此,您需要在显示任何内容之前向该向量添加元素 .
有关该主题的更多信息,请参阅std::vector::push_back .
这里的语法错误:
display
函数不带任何参数 . 你打算做的是(假设你在向量中添加了一些元素):这里我们在向量中的每个元素上调用
display
方法 .有关该主题的更多信息,请参见Range-based for loop .