현재 C++에서 .txt 파일의 정보를 가져 와서 나중에 참조하기 위해 동적으로 할당하는 프로그램을 작성하고 있습니다. 정보는 형식 (성) (급여) (공제) (% 보너스)입니다. 다음과 같이 I는 헤더 파일에 구조체를 만들었습니다변수의 범위가 잘못되었습니다.
struct PayrollInfo
{
string first, last;
float salary, deduction, bonus;
PayrollInfo *next;
};
내 문제는 내가 메인 함수에 의해 호출되는 함수에 변수를 호출 할 때, 컴파일러는 나에게 말하는 오류를 준다이다 변수는 "범위를 벗어났습니다". 필자는 필자가 main 함수에서 구조체 포인터를 선언했기 때문에이 포인터는 호출 된 함수로 전달 될 것이라고 선언했기 때문입니다. 이 문제를 해결하려면 어떻게해야합니까? 나는 아래에 나의 코드를 포함시켰다. Open은 파일을 열고 함수가 존재하는 경우 0을 반환하는 함수입니다. 또한 동적 메모리 할당을 처음 사용하기 때문에 Read() 함수에서 눈에 보이는 오류가 있으면 알려 주시기 바랍니다! 나는 새 사용자를 해요 이후
main()
{
PayrollInfo *head, *tail, *newp, *tmp;
head = tail = newp = tmp = NULL;
while(newp = Read())
.
.
.
PayrollInfo *Read()
{
PayrollInfo *tmp = NULL;
if (Open() == 0)
{
tmp = new PayrollInfo;
tmp->first = first;
tmp->last = last;
tmp->salary = salary;
tmp->bonus = bonus;
tmp->deduction = deduction;
}
else
return NULL;
return tmp;
}
당신은'main()'전에'int'가 필요합니다! – ChiefTwoPencils
팁 : 절대로'new'를 사용하지 마십시오. 이 경우 똑똑한 포인터가 똑같이되지만 더 좋을 것입니다. 물론 동적 할당을 사용하지 않을 경우에도 도움이 될 수 있습니다. 포인터가 없으면 표시된 코드가 여전히 작동합니다. – chris
PayrollInfo를 새로 시작할 때 다음 포인터를 초기화해야합니다. 그렇지 않으면 거기에 쓰레기가 생겨서 디버깅하는 것이 결코 재미 없다. –