2014-04-04 7 views
0

난 내 자신의 배열 클래스의 >> 연산자를 대체하기 위해 노력하고있어에 대한 >> 연산자 우선 ++ :c를 배열 클래스

std::istream& operator>>(std::istream& input, Array& array) { 
for (int i = 0; i < array.size; i++) 
    input >> array[i]; 

return input; 
} 

을하지만 난 다음 오류가 될 :

std::istream& Array::operator>>(std::istream&, const Array&)' must take exactly one argument

모든 내가 본 예가 그 것처럼 구현됩니다. 왜 컴파일러가 독창적 인 논쟁을 원하나요? 무엇을해야합니까?

Array a; 
a >> whatever; 

당신은 그렇지 않은 의미, 그것으로 쓰기 위해 istream를 원하는 것 :

+0

클래스 외부 나 내부에서 구현할 때와 다릅니다. Array 클래스 안에 있다면 하나의 매개 변수가 필요합니다. –

답변

3

operator>> 경우는 Array 객체에서 작동하고 당신이 그것을 줄 어떤 매개 변수를 취할 것입니다, 클래스의 구성원 인 멤버가되도록 어느 클래스 외부로 이동하거나 (효과적으로 그것을 비회원 만드는) friend로 선언하는 클래스 내에 정의되면

class Array 
{ 
//......... 
friend std::istream& operator>>(std::istream& input, Array& array) { 
    for (int i = 0; i < array.size; i++) 
     input >> array[i]; 

    return input; 
} 
}; 
+0

답변 해 주셔서 감사합니다. – user3477008

0

를 이항 연산자 기능해야 왼쪽 인수가 암시 적으로 *this이기 때문에 하나의 인수 만 있습니다. Extractor를 자유 함수로 정의해야합니다.이 추출기는 클래스 외부에서 정의 할 수 있습니다. 또한 추출기가 전용 변수에 액세스해야하는 경우이를 클래스 내부에 friend으로 정의/선언 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. – user3477008