我想从文件中读取信息并将该信息放在指向类数组的指针中。它不断向我们抛出异常 - > 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;
};
答案 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);
.....