Я начинающий программист, и я только начал использовать классы и объекты, поэтому, пожалуйста, извините за беспорядок, который я сделал.
Цель этой функции — проверить, существует ли файл имени пользователя, если он существует, вернуть имя пользователя в main.cpp, чтобы я мог затем сохранить его в главном и использовать его для обновления этого конкретного файла, если это необходимо.
Из моего текущего исследования вы не можете вернуть строку или массив символов, из аналогичных случаев, которые они предложили вместо этого использовать векторы, будет ли это правильным путем для меня, или есть другое решение? Я также знаю, что я использовал void и не возвращаемый тип на данный момент (был для целей тестирования).
// Вход в файл класса
void Login::UserSelectLogin()
{
Draw Gotoxy;
Draw ObjectLogin;
Draw ObjectBorder;
string password;
string userName;
bool loginSucceed;
do
{
system("CLS");
ObjectBorder.Border();
ObjectLogin.Login();
//USER INPUTS
Gotoxy.gotoxy(27, 6);
cin >> userName;
Gotoxy.gotoxy(27, 7);
cin >> password;
if (ifstream(userName))
return userName;
else
{
Gotoxy.gotoxy(30, 8);
cout << "USER ALREADY EXISTS";
loginSucceed = false;
_getch();
}
} while (loginSucceed != true);
}
// Заголовочный файл
#ifndef LOGIN_H
#define LOGIN_H
#include <string>
class Login
{
public:
Login();
string UserSelectLogin();
void UserSelectNewUser();
};
#endif
//main.cpp
int main()
{
SetWindow(80, 22);
Draw ObjectBorder;
Draw ObjectLoginOrNewUser;
Draw ObjectLogin;
Draw ObjectNewUser;
Draw ObjectOptionsMenu;
Draw ObjectMap;
Draw ObjectBattleScreen;
Draw ObjectGotoxy;
Login LoginUser;
Login CreateNewUser;
string userName;
char firstScreenChoice;
bool gameQuit = false;
do
{
ObjectBorder.Border();
ObjectLoginOrNewUser.LoginOrNewUser();
firstScreenChoice = _getch();
switch (firstScreenChoice)
{
case '1':
userName = LoginUser.UserSelectLogin();
_getch();
break;
case '2':
CreateNewUser.UserSelectNewUser();
_getch();
break;
default:
system("CLS");
ObjectBorder.Border();
cout << "INVALID INPUT";
_getch();
}
system("CLS");
} while (gameQuit != true);
}
Вы можете вернуть строку по значению. Просто объявите функцию, чтобы вернуть std::string
и использовать что-то вроде return userName;
в функции.
если файл имени пользователя существует, если он существует, верните имя пользователя
main.cpp, так что я могу сохранить его в главном и использовать его для обновления
этот конкретный файл, если это необходимо.
Вы можете рассмотреть возможность перемещения строки userName в качестве формального параметра (передача по ссылке) …
void Login::UserSelectLogin(std::string& userName)
{
...
Не требуется возврата userName (в вашем коде отсутствует тип возврата)
Предупреждение: вы, вероятно, должны убедиться, что userName.size () будет 0 при неудачной попытке входа в систему. (т.е. установить его в нулевую строку)
userName = "";
обновление: примечание об использовании
с объявлением выше и реализацией вроде:
void Login::UserSelectLogin(std::string& userName){ /*..implementation..*/ };
Затем в main или из любой функции вы вызываете с помощью:
// assume
Login aLogin; // default ctor
// ...
// ... time to fetch login name
std::string aUserName; // default ctor creates null string
aLogin.UserSelectLogin(aUserName); // formal parameter is local var
// ... continue