如何将数据从公共方法添加到同一类的私有成员数组中?

时间:2019-03-26 14:25:15

标签: c++ arrays class class-template

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

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

std::cin >> array[counter];

我得到一个长错误:pasted here to save space

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

标题:

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

1 个答案:

答案 0 :(得分:0)

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

  

无效的操作数到二进制表达式('std :: istream'
        (aka'basic_istream')和'const std :: string'(aka'const basic_string'))
      std :: cout <<“输入员工ID:\ t”; std :: cin >>员工[计数器];

真的意味着编译器无法为接受const std :: string的std :: istream(它是cin)找到任何运算符>>。

有两种解决方法,各有优缺点。

  • 您从const中删除了Add。现在可以更改班级成员(并且就Add而言,employee [counter]将是std :: string。)

但是,添加可以更改所有班级成员。

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


mutable sArray employee;

这将使sArray甚至可以从const进行更改。但是,现在所有 const函数都可以更改employee