Как я могу добавить данные из открытого метода в массив закрытых членов того же класса? - PullRequest
0 голосов
/ 26 марта 2019

У меня проблемы с сохранением данных, считываемых с клавиатуры, в массив приватных членов.

Когда я пытаюсь просто добавить данные, используя:

std::cin >> array[counter];

Я получаю длинную ошибку: вставлено сюда для экономии места

В настоящее время я пытаюсь найти способ сохранить входные данные во временную переменную и затем отправить их в массив, но я получаю ту же ошибку.

Заголовок:

template<class Type>
class Department
{
  private:
    const static int MAX = 4;
    typedef std::string sArray[MAX];
    typedef Type tArray[MAX];

    std::string deptName;
    sArray names;
    tArray salary;

    public:
       Department(const std::string & dept);
       bool Add() const;
    ...
    ...
};

Реализация:

template<class Type>
Department<Type> :: Department(const std::string & name)
{...}

template<class Type>
bool Department<Type> :: Add() const
{
  if (IsFull())
    return 0;
  else
  {
    Type tempName;
    Type tempSal;
    std::cout << "\nAdd called\n";
    std::cout << "Enter employee ID:\t"; std::cin >> tempName;
    std::cout << "Enter employee salary:\t"; std::cin>>tempSal;

    //What is the best way to add the data stored in tempName, and tempSal to the arrays in the class

    return 1;
  }
}

Ссылка на MCVE

1 Ответ

0 голосов
/ 27 марта 2019

Итак, проблема сводилась к тому, что метод Add был помечен как const.Сообщение об ошибке

недопустимые операнды в двоичном выражении ('std :: istream'
(он же 'basic_istream') и 'const std :: string' (он же 'const basic_string'))
std :: cout << "Введите идентификатор сотрудника: \ t";std :: cin >> employee [counter];

действительно означает, что компилятор не может найти оператора >> для std :: istream (который является cin), который принимает const std :: string

Есть два способа решения этой проблемы, оба из которых имеют свои преимущества и недостатки.

  • Вы удаляете const из Add.Члены класса теперь могут быть изменены (а сотрудник [counter] вместо std :: string будет иметь значение Add).

Однако Add может измениться все членов класса.

или

  • Вы добавляете ключевое слово mutable для сотрудника:

mutable sArray employee;

это позволит изменять sArray даже с const.Однако теперь все константные функции могут измениться employee.

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