private한 멤버변수를 std::cin으로 직접입력이 불가능한가요?
조회수 2523회
private한 멤버변수를 std::cin으로 직접입력이 불가능한가요? 또한 아래의 문제점들은 왜 발생할까요?? 궁금합니다
아래는 class 헤더파일의 전부입니다.
class Bank
{
private:
int Account;
char *Name; //동적할당으로 받을거다.
int Money;
public:
//처음 메뉴 결정
void ShowMenu(void)const; //메뉴를 보여주자.
void MadeAccount(); //1. 계좌개설
void InputAccount(); //2. 입금
void OutputAccount();//3. 출금
void ShowAllAccount() const; // 4. 모든 계좌 출력
bool searchID(int id); //아이디 맞는지 확인과정
~Bank()
{
delete[]Name;
}
};
아래는 class cpp파일의 일부 입니다.
void Bank::MadeAccount()
{ cout << "[계좌 개설]" <<endl;
cout << "계좌ID: ";
cin >> Account; //문제발생지점1
char *name = 0 ;
cout << "이 름:";
cin >> name; //문제발생지점2
Name = new char[strlen(name) + 1];
int money;
cout << "입금액:";
Money = 0;
cin >> money;
Money += money;
}
위에 문제발생지점에서 문제가 발생하고 있습니다.
문제 발생지점1은
문제 발생지점2는
위와 같은 문제가 발생하고있습니다... 어떻게 해결하면 좋을까요?
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
name에 메모리를 할당하지 않았기 때문에 아래처럼 미리 할당해주시면 됩니다.
char *name = 0 ;
를 아래와 같이 변경해서 해보세요.
char *name = new char[20];
하지만 20이라는 길이를 얼마나 잡을지 모르기 때문에 std::string을 이용해서 문자열을 관리하는것도 하나의 방법이 될것 같습니다.
private: //char *Name; string Name; ... void Bank::MadeAccount() { ... // char *name = 0 ; // cout << "이 름:"; // cin >> name; //문제발생지점2 // Name = new char[strlen(name) + 1]; string name; cout << "이 름 : "; cin >> name; Name = name; ... }
string을 사용한다면 소멸자에서 Name을 delete하는걸 삭제해주시면 됩니다.
~Bank() { // delete[]Name; }
-
(•́ ✖ •̀)
알 수 없는 사용자
- 너무나도 감사합니다!! 이거땜에 5시간을 고민했는데 오류라고 생각하지 못한부분이었습니다.. 도움을 주셔서 감사합니다! 알 수 없는 사용자 2017.2.25 10:24
- c++ 어렵습니다ㅠ. 저도 스크립트 언어만 하다가 c++ 다시보니깐 어렵네요 :D 문자열이 다소 까다롭습니다. 알 수 없는 사용자 2017.2.25 10:29
-
댓글 입력