我正在制作一款名为Magick的基于文本的冒险游戏
在这个游戏中,我有一个标记为damageSpell
的类,它看起来像这样
class damageSpell {
public:
int damage;
SubClasses type;
int manaCost;
std::string spellDescription;
};
我使用这个类作为矢量的类型
std::vector<damageSpell> damageSpells
稍后,我尝试在向量上使用damageSpells
函数向我的insert
向量中添加一个元素。
damageSpell fireball;
user.damageSpells.insert(user.damageSpells.begin(), 0, fireball);
然后尝试将其打印出来
std::cout << user.damageSpells[0];
执行此操作后,我收到此错误
magick1.cpp:252:15:错误:'operator&lt;&lt;'不匹配(操作数类型为'std :: ostream {aka std :: basic_ostream}'和'damageSpell')
我是C ++的新手,不知道这意味着什么,或者我应该如何修复它,我们将不胜感激。
答案 0 :(得分:3)
user.damageSpells[0]
是您的班级spellDamage
的一个实例。而且你的编译器也不知道如何打印它。您必须定义一个将在<<
运算符上调用的函数,并将其打印出来。
此运算符重载可以这样定义:
std::ostream& operator<<(std::ostream& stream, const damageSpell& damageSpellToPrint)
{
// Your code here
}
每次在<<
(如std::ostream
)和您的班级实例之间使用std::cout
运算符时,都会调用它。例如,以下代码将直接调用您的运算符函数,将std::cout
作为stream
参数传递,将user.damageSpells[0]
作为damageSpellToPrint
参数传递:
std::cout << user.damageSpells[0];
我建议您this post或this documentation帮助您理解C ++中的运算符重载概念。
答案 1 :(得分:0)
你要做的就是打印整个对象,但是&lt;&lt;操作符未定义为打印任何对象,您必须自己执行。
试试这个,
std::cout<<user.damageSpells[0].damage<<user.damageSpells[0].manaCost