C ++ Текстовая система инвентаризации RPG - PullRequest
6 голосов
/ 21 марта 2019

В настоящее время я беру класс программирования 2 (c ++), нам было поручено создать текстовый рпг. Я использую этот пост в качестве справочного материала для моей системы инвентаризации, так как я думаю, что это довольно эффективно. Но я продолжаю сталкиваться с ошибкой E0349 "no operator" == "или" << "соответствует этим операндам". </p>

Если бы кто-нибудь мог мне помочь, это было бы здорово. Вот мой полный набор кода:

#include "pch.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <vector>
#include <ostream>
#include <Windows.h>
#include <string>
#include <cctype>
using namespace std;

  struct Item {
    string name; //Item name.
    int slot; //Head, Torso, Hands
    int attack;
    int knowledge;
    int defense;
    int hp;
    int speed;
    int charisma;
  };

int main()
{

    //Variables, Strings, etc.
    int itemcounter = 0, counter = 0;


    //"Empty" Item
    Item Empty{ "<Empty>", 0, 0, 0 };

    vector<Item> Equipment = { 6, Empty }; //Current Equipment, 6 empty slots.
    vector<Item> Inventory = { }; //Player Inventory.
    string InventorySlots[] = { "Head" "Torso", "Hands" }; //Player parts where items can be equiped.

    cout << "You sit your bag down and take a look inside." << " You have:" << endl;

    for (int i = 0; i < itemcounter; i++)
    {
        cout << InventorySlots[i];
        if (Equipment[i] == "Empty ")
        {
        cout << " " << Equipment[i] << endl << endl;
      }
    }

}

Здесь мои ошибки более конкретны

for (int i = 0; i < itemcounter; i++)  //Display equipped
{
    cout << InventorySlots[i];
    if (Equipment[i] == "Empty ") //Error Here
    {
    cout << " " << Equipment[i] << endl << endl; //Errore Here
  }
}

Сообщение об ошибке

Error (active)  E0349   no operator "<<" matches these operands     C:\Users\USER\source\repos\clunkinv\clunkinv\clunkinv.cpp   47

1 Ответ

11 голосов
/ 21 марта 2019

Equipment[i] является объектом типа Item.Если вы не предоставляете метод для сравнения вашего объекта с "Empty", компилятор не может знать, как сравнивать в строке

if (Equipment[i] == "Empty ")

Либо вы сравниваете свойство

if (Equipment[i].name == "Empty ")

или вы должны предоставить метод.Та же проблема в строке

cout << " " << Equipment[i] << endl << endl;

Компилятор не может знать, как напечатать ваш объект.Вы должны предоставить функцию для этого.

Вы можете

struct Item {
    string name; //Item name.
    int slot; //Head, Torso, Hands
    int attack;
    int knowledge;
    int defense;
    int hp;
    int speed;
    int charisma;
};

std::ostream &operator<<(std::ostream &os, const Item& item) {
    os << item.name;
    return os;
}

Вы должны перегружать операторы для ваших классов, если вы хотите их использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...