您好我尝试实现登录系统,但我尝试了很多次,但我仍然没有得到它。 我有一个类用户和一个类登录,一个测试函数..我在一个教程后尝试过这个,但它是一个默认的用户名和密码,只有那个在登录中工作,但我需要有可能用户登录;
class User{
private:
char *username;
char *password;
public:
User(){}
User(char *,char *p){...}
~User();
friend ostream &operator<<(ostream &output, User &u);
char* getUsername(){...};
char* getPassword(){...};
};
class Loginn
{
public:
string username;
string password;
Loginn()
{
username = "\0";
password = "\0";
}
};
bool Loginn::ptlogin(User users[])
{
int x;
string ch_username = users[x].getUsername;
string ch_password = users[x].getPassword;
cout << "Enter username::\t";
cin >> username;
cout << "Enter password::\t";
cin >> password;
if ((username == ch_username)&&(password =ch_password))
{
return true;
}
else
{
return false;
}
}
void MainMenu(User users[]);
{
//this is from where I want to call login function, not from main()
}
void main()
{
User u2("Jamie15","t3456");
User u3("Chris","fgh6");
User users[2]={u2,u3};
MainMenu(users);
}
我希望我的登录系统测试输入的用户名和密码是否与用户的密码和用户名相匹配,我的用户是u2和u3。谢谢! 此外,来自用户的数据类型需要保持char,我无法更改它。
答案 0 :(得分:1)
在Loginn::ptlogin
方法中,未初始化索引变量x
。
表达式:
users[x].getUsername;
可以从您无法访问的内存或访问内存中返回任何内容;所有这些都取决于x
索引的随机未初始化值。
我强烈建议使用std::vector
而不是数组。另外,传递您所指的索引(或至少初始化它)。
编辑1:MainMenu
功能
为了调用登录功能,您需要拥有Login
类的实例(变量)或将登录功能设置为静态。
void MainMenu(std::vector<User>& users)
{
Loginn instance;
instance.ptlogin(users);
}
另一种方法是在main
中创建登录实例并将其传递给MainMenu
:
void MainMenu(std::vector<User>& users,
Loginn& instance);
int main(void)
{
std::vector<User> users;
Loginn instance;
MainMenu(users, instance);
return EXIT_SUCCESS;
}
编辑2:静态方法
如果您使用static
方法,则不需要实例来调用该方法:
class Loginn
{
public:
static void ptlogin(std::vector<User>& users);
};
void MainMenu(std::vector<User>& users)
{
Loginn::ptLogin(users);
}