尝试打印矢量元素时,'operator<<'不匹配

时间:2016-10-22 06:51:38

标签: c++ vector

我正在制作一款名为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 ++的新手,不知道这意味着什么,或者我应该如何修复它,我们将不胜感激。

2 个答案:

答案 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 postthis documentation帮助您理解C ++中的运算符重载概念。

答案 1 :(得分:0)

你要做的就是打印整个对象,但是&lt;&lt;操作符未定义为打印任何对象,您必须自己执行。        试试这个,     std::cout<<user.damageSpells[0].damage<<user.damageSpells[0].manaCost

等等...... 对于子类也是