2017-04-20 2 views
-2

저는 C++을 처음 접했을뿐입니다. 저는 처음에 ... 저는 도움이 필요합니다. 누군가가 내가 잘못 생각한 부분을 설명 할 수 있다면 감사하겠습니다. :
내 모든 Time.h 코드의 첫째 : 지금>> operator overloading ... C++

#ifndef TIME_H 
#define TIME_H 
#include<iostream> 
using namespace std; 

class time { 
    friend istream &operator>> (istream &, time); 
private: 
    int hour; 
    int minute; 
    int second; 

public: 
    time(int = 0, int = 0, int = 0); 
    void settime(int, int, int); 
    void sethour(int); 
    void setminute(int); 
    void setsecond(int); 
}; 

#endif 

을 그리고, Time.cpp :

#include<iostream> 
#include"Time.h" 
using namespace std; 
using std::cout; 
using std::cin; 

time::time(int h, int m, int s) 
{ 
    settime(h, m, s); 
} 
void time::settime(int hr, int min, int sec) 
{ 
    sethour(hr); 
    setminute(min); 
    setsecond(sec); 
} 
void time::sethour(int h) 
{ 
    hour = (h >= 0 && h < 24) ? h : 0; 
} 
void time::setminute(int m) 
{ 
    minute = (m >= 0 && m < 60) ? m : 0; 
} 
void time::setsecond(int s) 
{ 
    second = (s >= 0 && s < 60) ? s : 0; 
} 
istream &operator>> (istream &in, time m) 
{ 
    in >> m.sethour >> m.setminute >> m.setsecond; 
} 

그리고 마지막으로 source.cpp :

#include<iostream> 
#include"D:\headers\Time.h" 
using namespace std; 
void main() 
{ 
    time t; 
    cin >> t; 
    system("pause"); 
} 

하지만 컴파일 할 때 오류가 발생합니다 :
1. 오류 C3867 'time :: sethour': 비표준 구문; '&'을 사용하여 멤버에 대한 포인터를 만듭니다. Project33 D : \ headers \ Time.cpp
2. 오류 C2679 바이너리 '>>': 'overloaded-function'유형의 오른쪽 피연산자를 사용하는 연산자가 없습니다 (또는 받아 들일 수있는 변환은 없습니다.) Project33 D : \ headers \ Time.cpp 아무도 나를 도울 수 있습니까 ???

+1

, 무엇을 그 인수는 어떻게됩니까? 논쟁을 수정할 때 어떤 일이 발생합니까? 이 변경 사항이 함수를 호출하는 코드에 반영됩니까? –

답변

1

sethour은 멤버 변수가 아닌 멤버 변수입니다. 변수를 사용해야합니다.

당신은 사용할 수 있습니다

istream &operator>> (istream &in, time m) 
{ 
    return (in >> m.hour >> m.minute >> m.second); 
} 

을하지만, 당신이 사본을 변경하기 때문에 호출하는 함수 어떤 좋은 일을하지 않을 것이다. 참고로 m을 전달해야합니다.

istream &operator>> (istream &in, time& m) 
{ 
    return (in >> m.hour >> m.minute >> m.second); 
} 

그에 따라 선언을 변경해야합니다.

함수는 클래스의 친구, 당신은 사용할 수 없었다면 : 당신이 함수에 값에 의해 인수를 전달하면

istream &operator>> (istream &in, time& m) 
{ 
    // Read the data. 
    int hour; 
    int minute; 
    int second; 
    in >> m.hour >> m.minute >> m.second; 

    // Set the member values using function calls. 
    m.sethour(hour); 
    m.setminute(minute); 
    m.setsecond(second); 

    return in; 
} 
+1

그것은 일했습니다 ... 많이 감사합니다 남자, –

+0

@ shahid-e-gomnam, 도와 줘서 기쁩니다. –

+0

그것은 일했다 ... 많은 사람에게 감사드립니다 ... 그냥 오순절 등등 설정 해야하는지 ... 공공 방법으로 개인 회원에 액세스하는 것이 더 안전하다고 누군가가 말하기 때문에 ... 당신은 이것을 설명 할 수 있습니까? 나를위한 작은 조각? –

1

은 현재 함수로 읽는 : 단순한 오타의

in >> m.sethour >> m.setminute >> m.setsecond; 
     ^  ^   ^

합니다. 더 큰 문제는 time을 값으로 사용하면 변경 사항이 전파되지 않습니다. 당신은 아마 거기에 참조를하고 싶었을거야.

관련 문제