저는 C++을 처음 접했을뿐입니다. 몇 주 전에 방금 배웠습니다. 개별적으로 동일한 참조를 가리키는 2 개의 포인터에 문제가 있습니다. * workingOn을 재 할당하려고하면 * 사용자가 쓰레기로 변합니다. 여기 두 포인터가 동일한 참조
코드입니다 :std::cout << static_cast<int> (user->getPermission()) << endl; // return 0
Customer c_temp(username, password, Permission::CUSTOMER);
s_customer.push_back(c_temp);
workingOn = &s_customer[s_customer.size() - 1];
std::cout << static_cast<int> (user->getPermission()) << endl; // return random memory
return customerLoggedInScreen();
가져 오기 권한이 관리자, 고객, 유지 보수를 포함 0,1,2을 반환 할 수 있습니다 열거입니다.
* 사용자는 관리자 또는 고객이 될 수 있습니다. * workingOn은 현재 작업하고있는 사람입니다.
코드는 더 나은 설계되었다하는의 수 (고객으로) 자신을 수 ...하지만 난 다형성 너무 불편했고 수있는 I 사용자가 workingOn있는 사람을 변경하기 위해 노력하고있어 C++
하지만 이후에는 포인터가 쓰레기 메모리로 바뀝니다. 처음에는 사용자와 작업하는 사람이 동일합니다. 내가 가진
void Controller::login()
{
bool loggedIN = false;
using namespace std;
string input_password, input_username;
//call the login screen
UI.login(input_username, input_password);
/*
If the user is not a customer we will login as a manager
*/
for (int i = 0; i < s_customer.size(); ++i) {
user = &s_customer[i];
if (user->getUsername().compare(input_username) == 0 && user->getPassword().compare(input_password) == 0) {
user_loggedIn = input_username; // store the person who is logged in
if (user->getPermission() == Permission::CUSTOMER) {
workingOn= &s_customer[i];
return whatUItoDisplay();
}
return whatUItoDisplay();
}
}
} 내 헤더에
: 여기
는 사용자의 초기화이다 공공 : 표준 : : 벡터 s_customer; 벡터s_container
의 크기가 변경되는 경우 //이 프로그램
Interface UI;
std::string user_loggedIn;
Customer *user = nullptr;
Customer *workingOn = nullptr;
_std :: cout_는 디자인 *에서 유용한 *을 반환하지 않습니다. 코드 샘플이 너무 많아 세부 정보가 너무 많아서 문제가 해결되지 않아 유용하다고 제안 할 수 있습니다. [최소한의 완전하고 검증 가능한 예제를 만드는 방법]을 참조하십시오. – agg3l
기본적으로 권한은 0,1,2를 반환 할 수있는 enum입니다. s_customer는 벡터 배열이고 workingOn과 user는 모두 고객 포인터입니다. – Muffin
_I_ 가능성이 무엇인지 짐작할 수 있습니다. 아무도 다른 사람들과 똑같이 말할 수 없습니다. 유용한 답변을 받으려면 질문을 조정하십시오. 댓글에는 없지만 원래 질문을 수정하고 서식을 지정합니다. 커뮤니티는 나중에 필요에 따라 커뮤니티를 조정하는 데 도움이되지만 질문을 이해하는 것이 명확하지 않은 경우 – agg3l