строка не будет отображаться на экране, когда cout'ed - PullRequest
0 голосов
/ 02 февраля 2020

Я пытаюсь создать собственную программу таблицы символов DnD, но не могу отобразить имя. У него нет ошибок, но когда дело доходит до cout имени, оно просто игнорирует то, что я вводил ранее как имя, и ничего не дает.

#include <iostream>
#include <string>

using namespace std;

class playerone {
 public:
  string Name;
  int Level = 1;
  void ready() {
    cout << "ready player one" << endl;
    cin >> Name;
  }
  void info() {
    cout << "name: " << Name;
    cout << endl << "level: " << Level << endl;
  }
};
class option {
 public:
  void create() {
    playerone bo;
    bo.ready();
  }
  void info() {
    playerone bo;
    bo.info();
  }
};

int main() {
  string Name;
  string action;
  cin >> action;
  if (action == "start") {
    option bo;
    bo.create();
  }
  while (action != "stop") {
    cin >> action;
    if (action == "info") {
      option bo;
      bo.info();
    }
  }
}

1 Ответ

2 голосов
/ 02 февраля 2020

Есть два разных игрока, один в option::create и другой в option::info. Вы читаете один и распечатываете информацию другого.

Я не понимаю, для чего option хорош. Идомати c способ чтения ввода и записи вывода заключается в перегрузке operator<< и operator>>:

std::istream& operator>>(std::istream& in, playerone& p) {
    in >> p.Name;
    // read other members from in
    return in;
}
std::ostream& operator<<(std::ostream& out,const playerone& p) {
    out << p.Name;
    // write other members to out
    return out;
}

Теперь вы можете читать и писать playerone следующим образом:

int main() {
     playerone p;
     std::cout << "Name: ";
     std::cin >> p;
     std::cout << "Player info: " << p;
}

Если вы хотите, чтобы option управлял игроком, вы можете сделать это следующим образом:

class option{
    playerone player;
    public:
    void create(){
        std::cin >> player;
    }
    void info(){
        std::cout << player;
    }
};

Важным моментом является то, что теперь create и info используют одно и то же playerone , который я сделал членом option.

...