C ++如何格式化指向类数组的指针?

时间:2017-11-15 04:24:37

标签: c++ arrays class

我想从文件中读取信息并将该信息放在指向类数组的指针中。它不断向我们抛出异常 - > gt; setUserName(name);但如果我把它改成我们[i] - > setUserName(name);它说“表达式必须有指针类型”。我该如何解决这个问题?

    const int SIZE = 100;
    User *us = new User[SIZE];

    input.open("Account.txt", ios::in);

    if (input)
    {
       input >> size;

       for (int i = 0; i < size; i++)
       {
          us = new User[i];
          getline(input, uName);
          us->setUserName(uName);

          getline(input, password);
          us->setPassword(password);

          getline(input, name);
          us->setName(name);
       }
    else 
       cout << "Error opening file" << endl;

这是用户类:

    class User
    {
    public:
      User();
      ~User();

      void setName(string);
      string getName();

      void setUserName(string);
      string getUserName();

      void setPassword(string);
      string getPassword();

      void setFollower(vector<User*>*);
      vector<User*>* getFollower();

      void setFollowing(vector<User*>*);
      vector<User*>* getFollowing();

    protected:
      string name;
      string userName;
      string password;

      vector <User*>* followers;
      vector <User*>* following;

  };

3 个答案:

答案 0 :(得分:4)

      us = new User[i];

在这里你扔掉你此刻创建的所有数组并分配一个新数组,最终得到 N(O²)泄漏的空间。

首先,删除此行。接下来,您可以在后续属性设置中使用us[i],但由于它将是对数组元素的引用,而不是指针,因此您需要通过.调用其方法,而不是{{1 }}

BTW,在列表中你提供了一个大括号,->之前的大括号。

作为旁注,你在课堂上使用了太多的普通指针。你确实设法妥善处理和清理它们,不是吗?

另一方面,将用户名+密码存储为纯文本(这里是密码哈希值)通常是个坏主意。 :)

答案 1 :(得分:1)

us = new User[i];

你的问题在这里。这段代码将创建一个具有i元素的数组,每个元素都是一个新的User对象,然后指针我们将指向这个。 我建议你使用vector,它是动态数组,它比SIZE = 100的静态数组更好,如果你不确定输入文件(Account.txt可能包含超过100个用户信息)

std::vector<User> v;  // create a vector of User

input.open("Account.txt", ios::in);

if (input)
{
    input >> size;
    User user;  // a temporary user
    for (int i = 0; i < size; i++)
    {
        getline(input, uName);
        user->setUserName(uName);

        getline(input, password);
        user->setPassword(password);

        getline(input, name);
        user->setName(name);
        v.push_back(user); // push to vector
    }
}
else
    cout << "Error opening file" << endl;

答案 2 :(得分:0)

如果你想继续使用数组,请执行此操作

  if (input)
    {
       input >> size;

       for (int i = 0; i < size; i++)
       {
          getline(input, uName);
          us[i].setUserName(uName);
.....