如何将来自 public 方法的数据添加到同一个 class 中的私有成员数组?

How can I add data from a public method into a private member array in the same class?

我无法将从键盘读取的数据存储到私有成员数组中。

当我尝试使用以下方法简单地添加数据时:

std::cin >> array[counter];

我收到一个很长的错误:pasted here to save space

我目前正在尝试找到一种方法将输入存储到一个临时变量中,然后将其发送到数组中,但我遇到了同样的错误。

Header:

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;
  }
}

Link to MCVE

因此,问题归结为 Add 方法被标记为 const。错误信息

invalid operands to binary expression ('std::istream'
(aka 'basic_istream') and 'const std::string' (aka 'const basic_string'))
std::cout << "Enter employee ID:\t"; std::cin >> employee[counter];

确实意味着编译器找不到任何接受 const std::string

的 std::istream(即 cin)的运算符>>

解决这个问题有两种方法,各有优缺点。

  • 您从 Add 中删除了 const。 class 成员现在可以更改(就 Add 而言,雇员[柜台] 将是 std::string)。

但是,添加可以更改 所有 的 class 成员。

  • 您将 mutable 关键字添加到员工:


mutable sArray employee;

这将使 sArray 即使从 const 开始也可以更改。但是,现在所有 const 函数都可以更改employee.