我正在用c++创建一个简单的银行系统来测试我的知识,因为我是初学者。我有写数据到一个私人类的麻烦,并在互联网上环顾四周后,我想出了一个解决方案,我认为会工作,但没有。当我完成"创建用户"时,会抛出一个异常。抛出异常:读访问冲突。_Pnext = 0x6"。我不确定这意味着什么,但我猜它与createuser函数中的指针有关。我希望我的解释不会太含糊,但我完全不知道发生了什么。同时,任何批评都是欢迎的。
#include <iostream>
#include <string>
void clearscreen();
int createuser();
class MyClass
{
private:
std::string Username;
std::string Password;
int money = 0;
public:
void setUsername(std::string x) {
Username = x;
}
void setPassword(std::string y) {
Password = y;
}
void setMoney(int z) {
money = z;
}
};
void clearscreen() {
system("cls");
}
int main() {
std::cout << "Welcome new User!n" << std::endl;
bool exitprogram = false;
while (exitprogram == false)
{
std::cout << "The Options are:n";
std::cout << "1. Create Usern" << "2. Loginn" << "3. Exit Programn" << "nEnter an option: ";
int option = 0;
std::cin >> option;
switch (option)
{
case 1:
createuser();
break;
case 2:
std::cout << "nThis option is not avalible yet!";
case 3:
exitprogram = true;
break;
}
}
return 0;
}
int createuser() {
clearscreen();
MyClass User;
int* p = (int*)&User;
std::string* i = (std::string*)&User;
std::cout << "Please enter the correct information!n" << "Username: ";
std::string createusern;
std::cin >> createusern;
*i = createusern;
std::cout << "n Password: ";
std::string createpasswordn;
std::cin >> createpasswordn;
*i = createpasswordn;
std::cout << "nDeposit Money: ";
int insertmoney;
std::cin >> insertmoney;
*p = insertmoney;
std::cout << "nn Congratz, You now have a bank accout! nn";
clearscreen();
return 0;
}
你的指针类型转换到处都是,当然"不寻常"。和你想做的不一样
*i = createusern;
这一行是不正确的,因为i
没有指向字符串。它指向一个User
对象。你真正想要做的是像这样的
User.setUsername( createusern );
…,同样适用于你的其他人口尝试。这些元素都有setter函数,所以请使用它们。
您还应该记住,您的User
对象是本地的,并且在createuser
函数结束后将无法存活
这绝对是错的:
MyClass User;
int* p = (int*)&User;
MyClass
的对象不是int
的对象,但是你强迫编译器设置一个指向它的int型指针。这会调用未定义的行为,这会导致崩溃(如您所见)
std::string* i = (std::string*)&User;
…同样的问题。MyClass
的对象也不是std::string
,所以强制编译器设置指向string的指针指向它也没有意义。
我不知道你在这里想做什么,但是使用c风格的强制转换来强制指针指向不相关的类型绝对不是这样做的。