由于我是初學者,我正在用 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 User\n" << "2. Login\n" << "3. Exit Program\n" << "\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 << "\n\n Congratz, You now have a bank accout! \n\n";
clearscreen();
return 0;
}
uj5u.com熱心網友回復:
那么這絕對是錯誤的:
MyClass User;
int* p = (int*)&User;
的物件MyClass不是int,但您正在強制編譯器設定指向 int 的指標以指向它。這是呼叫未定義的行為,這可能會導致崩潰(如您所見)
std::string* i = (std::string*)&User;
...這里有同樣的問題。的物件MyClass也不std::string是,因此強制編譯器設定指向字串的指標也沒有意義。
我不知道你想在那里做什么,但使用 C 風格的強制轉換來強制指標指向不相關的型別絕對不是這樣做的方法。
uj5u.com熱心網友回復:
您的指標投射遍布整個地圖,并且肯定“不尋常”并且對于您嘗試執行的操作不正確。
此行*i = createusern;不正確,因為i它沒有指向字串。它指向一個User物件。你真正想做的事情是這樣的
User.setUsername( createusern );
......你的其他人口嘗試也是如此。你有這些元素的 setter 函式,所以使用它們。
您還應該記住,您的User物件是本地物件,并且不會在createuser函式結束后繼續存在
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/328463.html
