2012-02-15 4 views
0

숫자의 숫자 합계를 찾는 프로그램입니다. I은 'Z'는 Z의 원래 값이 소거되지 않으면 초기화초기화되지 않은 변수 읽기 오류

runtime failure:variable 'z' is being used without being initialized. 

:

컴파일 된 코드는 오류를 범?

여기에 코드

#include<iostream> 

#include<cmath> 
#include<string> 
#include<iomanip> 
using namespace std; 
class sumd 
{ 
int x; 
    public: 
void getdata() 
{ 
    int z=0; 
    cout<<"enter the no"; 
cin>>x; 
z=x; 
}; 
void sumdigit() 
{ 
int z,y,sume,temp;    // this is the line with the error... 
for(temp=z;temp>0;temp/=10) 
{ 
    y=temp%10; 
sume+=y; 
} 
cout<<sume; 

}; 
}; 
    int main() 
    { 
    sumd s1; 
    s1.getdata(); 
    s1.sumdigit(); 
    return 0; 
     } 
+0

코드를 제시 할 때 탭을 사용하지 마십시오. 좋은 레이아웃을 얻지 못합니다. 탭을 적절한 수의 공란으로 바꾸고 (적어도 유닉스에서는 그렇게 할 수있는 도구가있다.) 결과를 붙여 넣는다. –

답변

4

나는 문제가이 방법에 있다고 생각 입력 :

void sumdigit() 
{ 
    int z,y,sume,temp;    // this is the line with the error... 
    for(temp=z;temp>0;temp/=10) 
    { 
     y=temp%10; 
     sume+=y; 
    } 
    cout<<sume; 
} 

당신은 z 또는 y에 대한 값을 제공하지 않은; 그들은 초기화되지 않은 지역 변수입니다. 나는 당신이 아마도 동봉하는 클래스의 데이터 멤버 인 zy을 만들려고했다고 생각한다. 이 메서드 외부에서 이러한 변수의 정의를 이동하고 해당 변수가 수정되는지 확인하십시오.

희망이 도움이됩니다.

+0

'y'는 초기화되지 않은 상태로 사용되고 있지 않으며 멤버로 여겨지지 않습니다. 그것은 단지 엄격히 요구되는 것보다 더 넓은 범위에서 선언되었습니다. 당신이'z'에 대해 옳은 것처럼 보입니다. 'sume'은 0으로 초기화 될 필요가 있습니다. –

0

이 시점에서 z에 대한 '원래 값'이 없습니다. getdata 함수의 z 값이 저장된다고 생각한다고 가정합니다. 그렇지 않습니다. 함수에서 z의 값을 반환하고 sumdigit 함수에 전달해야합니다.

+0

나는 초보자 다. 당신은 그것을 조금 더 설명 할 수 있느냐? –

+0

아아 나는 당신이 학급을 사용하고 있다는 것을 눈치 채지 못했다. templatetypedef의 답변을 가지고 가면 괜찮을 것입니다. – Sylence

관련 문제