2013-07-07 2 views
0

현재 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; 
    } 
+2

당신은'main()'전에'int'가 필요합니다! – ChiefTwoPencils

+0

팁 : 절대로'new'를 사용하지 마십시오. 이 경우 똑똑한 포인터가 똑같이되지만 더 좋을 것입니다. 물론 동적 할당을 사용하지 않을 경우에도 도움이 될 수 있습니다. 포인터가 없으면 표시된 코드가 여전히 작동합니다. – chris

+0

PayrollInfo를 새로 시작할 때 다음 포인터를 초기화해야합니다. 그렇지 않으면 거기에 쓰레기가 생겨서 디버깅하는 것이 결코 재미 없다. –

답변

0

불행하게도 내가 언급 할 수 또는 나는 것 ...하지만 난 정말 너무 훨씬 더 말할 수 없어 조금 이상한 난 당신의 코드를 통지 한 가지가있다 당신의 주요 함수의 나머지 부분을 보지 않고서는, 그리고 그것은 당신이 변수를 전역 변수 인 것처럼 첫 번째, 마지막, 월급, 보너스 및 공제를 사용하려는 것입니다. 프로그램.

Open() 함수가 이러한 변수를 정의하기위한 것이라면, 범위를 벗어난 변수를 사용하려면 먼저 변수를 정의하고 Open() 함수를 수정해야합니다 매개 변수로 참조를 받아 들인 다음 그런 식으로 수정하면 찾고있는 결과를 얻을 수 있습니다. 그렇지만, 내가 볼 수있는 변수는 선언하지 않았고, Open() 내에서 선언 된 경우 문제가 있습니다.

Open() 함수의 코드뿐만 아니라 main() 함수 (포함, 변수 정의 등)보다 먼저 모든 코드를 게시하면 문제가 더 분명해질 수 있습니다.

관련 문제