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

标签 c++ arrays class

我想从文件中读取信息并将该信息放入指向类数组的指针中。它不断向 us->setUserName(name); 抛出异常。但如果我将其更改为 us[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;

  };

最佳答案

      us = new User[i];

在这里,您丢弃此时创建的所有数组并分配一个新数组,从而最终获得 N(O²) 泄漏空间。

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

顺便说一句,在您提供的列表中缺少一个大括号,即 else 之前的大括号。

顺便说一句,您在类中使用了太多普通指针。您确实设法正确处理和清理它们,不是吗?

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

关于C++ 如何格式化指向类数组的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47299342/

相关文章:

c++ - 为什么 C++ 虚拟调用并不比非虚拟调用慢多少?

c++ - 如何从继承的模板访问 typedef

php - 如何将 <bars 转换为 (PHP 中的无序列表?

arrays - Delphi SOAP 数组问题

java - 我应该将 Java 中的静态嵌套类重构为单独的类吗?

java - Android NDK - 引用 JNIEnv 从 C++ 调用 Java

c++ - 如何在C++中仅将键插入到bimap的一侧

javascript - 迭代数组内的数组并显示playerId、playerName和playerCategory

Java:接口(interface)和返回接口(interface)的函数的实现

c++ - protected 成员不能通过指针或对象访问