【发布时间】:2020-12-29 17:35:12
【问题描述】:
#include <iostream>
#include <string>
#include <vector>
class Enemy
{
public:
std::string type;
};
void add_enemy(std::vector<Enemy>&enemies, Enemy enemy);
int main()
{
Enemy nrone, nrtwo, nrthree, nrfour, nrfive;
// I want to add these and keep them in a vector
std::vector<Enemy> enemies;
nrone.type = "Orc";
nrtwo.type = "Goblin";
nrthree.type = "Troll";
nrfour.type = "Ogre";
nrfive.type = "Orc";
add_enemy(enemies, nrone);
add_enemy(enemies, nrtwo);
add_enemy(enemies, nrthree);
add_enemy(enemies, nrfour);
add_enemy(enemies, nrfive);
std::cout << enemies.size() << std::endl;
for(auto enemy: enemies)
std::cout << enemy << " " << std::endl;
return 0;
}
void add_enemy(std::vector<Enemy>&enemies, Enemy enemy)
{
enemies.push_back(enemy);
}
我正在练习向量和类,因为如果我不编写代码,我往往会很快忘记事情。在这里,我创建了一个名为Enemy 的类,我只给它一个公共属性,即std::string type;。然后我开始制作一堆 Enemy 对象,称为 nrone、nrtwo 等,并为每个对象指定类型:orc、goblin 等。
然后我创建了一个函数来将它们添加到向量中,而不是直接使用 push back(我为自己做了这个,练习函数和通过引用传递)。我知道这没有意义,因为使用 push back 更容易。
无论如何,现在我尝试循环遍历向量并输出,理想情况下,Orc, Goblin, Troll, Ogre, Orc 到屏幕,但它不起作用。我的编译器说 --- error, no match for operator 和 Enemy
发生了什么事?我尝试使用标准 std::vector<std::string>names{"Joe", "Jim", "Jessy"}; 使用 ranged foo 循环,它有效,但它不适用于我的 Enemy 类。
【问题讨论】:
-
问题不是循环播放,而是在屏幕上打印。首先打印一个
Enemy。错误和解决方法是一样的 -
@largest_prime_is_463035818 天哪,非常感谢!我将屏幕上的打印更改为“enemy.type”,它起作用了
-
class只有公共成员是struct
标签: c++ class for-loop oop vector