2014-11-17 4 views
3

로 선언하지, 난 g++을 사용하고있는 오류,은, 아래의 코드를 컴파일에 범위

in int main(), t1 was not declared in this scope.

를 얻을. main()에서 나는 이미 t1, t2t3을 선언했습니다. 그렇다면이 오류가 발생하는 이유는 무엇입니까? time 이름

#include<iostream> 
using namespace std; 
class time 
{ 
    int hours; 
    int minute; 
public: 
    void getdata(int h,int m) 
    { 
    hours=h; 
    minute=m; 
    } 
    void putdata(void) 
    { 
     cout<<"\n Hours = "<<hours; 
     cout<<"\n Minutes = "<<minute; 
    } 
    void sumtime(time ,time); 

}; 
void time::sumtime(time t1,time t2) 
{ 
    minute=t1.minute+t2.minute; 
    hours=minute/60; 
    minute=minute%60; 
    hours = hours + t1.hours + t2.hours; 
} 

int main() 
{ 
    time t1,t2,t3; 
    t1.getdata(2,45); 
    t2.getdata(3,30); 
    t3.sumtime(t1,t2); 
    cout<<"\n T1 ... "<<t1.putdata(); 
    cout<<"\n T2 ..."<<t2.putdata(); 
    cout<<"\n T3 ... "<<t3.putdata(); 

    return 0; 
} 
+0

같은 오류 메시지가 나타 났지만 'error : expected'; 'before't1''이 (가)'t1, t2, t3; '. 처음보고 된 구문 오류가 가장 중요합니다. 구문 오류는 종종 컴파일러를 혼동하여 나중에 오류 메시지가 의미가 없게 만듭니다. –

+0

'#include '은' '의 선언을 직접적으로 (또는 간접적으로) 표시 할 수 있다는 것을 매우 귀찮게합니다. 그러나 우리는 그것에 매료되어있는 것 같습니다. –

+1

'cout << "과 같은 줄은 \\ T1 ... \\ t1.putdata();'putdata()'가'ostream'을 반환하지 않기 때문에 컴파일되지 않습니다. – vsoftco

답변

7

클래스 가능성이 이름 충돌 C Standard Library function of the same name 함께.

내 권장 사항은 클래스와 관련 함수를 고유 한 네임 스페이스에 배치하는 것입니다.

나는 using namespace std이 아니라 실제로 필요한 물건을 가져와야합니다 (예 : using std::cout). 심지어 더 나은, using 전체 및 코드에서 명시 적 피하십시오.

+2

아니면 그냥 – jready

+0

@ResidentBiscuit : 좋은 제안이긴하지만 여기에 속임수가 없을 수도 있습니다. –

+0

그럴 경우 다른 이름을 사용하면 문제가 해결됩니까? 예를 들어, "std"네임 스페이스를 사용하지 마십시오. times "대신에 – Adi

-2

시간 클래스가 이미 네임 스페이스 std에 있으므로 클래스 이름을 Time (time 아님)으로 변경하십시오.

+0

당신은 실제로 묻는 질문에 답을하지 않았습니다. : 왜 이것이 오류입니까? –

+0

시간 클래스가 이미 네임 스페이스 std. – vincentp

+1

에 존재하기 때문에 - 그리고 요점은 당신이 대답에서 그렇게 말하지 않았다는 것입니다. –

0

이 프로그램에 오류가 하나 있습니다. 위의 줄 putdata()에 대한 기능

cout<<"\n T1 ... "<<t1.putdata() 

main()에서이 void 유형하지만 cout 필요 char 또는 전환 유형을 반환합니다. 따라서 다음과 같은 내용이어야합니다 :

cout<<"\n T3 ... "; 
t3.putdata();