2016-11-20 5 views
-4

함수에 과부하하려고했습니다. < <입니다. 나는 이것을 알아 내려고 노력하면서 몇 시간 동안 꼼짝하지 못했다. ostream에서이 작업을 수행하는 방법에 대한 많은 예제를 발견했지만 그 중 어느 것도 내 특정 문제를 대상으로하지 않았습니다.<< 클래스 함수 오버로드 시도 중

#include <iostream> 

class foo 
{ 
public: 
    foo& operator<< (foo& (*pf)(foo&)) 
    { 
    return pf(*this); 
    } 
    foo& do_something_more(foo& os) 
    { 
    return os; 
    } 
}; 

ostream& do_something(ostream& os) 
{ 
    os << "1." << "\n" << "2."; 
    return os; 
} 

int main() 
{ 
    foo a; 

    std::cout << do_something; // this works 
    a << do_something_more; // this do not 

    system("pause"); 
    return 0; 
} 

이 문제를 해결하는 방법 중 하나입니다. 'do_something_more'오류가 발생했습니다. 선언되지 않은 식별자이 이에 포함됩니다.

도움 주셔서 감사합니다.

+1

'do_something_more()'는'foo'의 멤버 함수로 인스턴스를 호출해야합니다. –

+0

아니면 정적으로 만들고'a << foo :: do_something_more; '... 또는 비회원 만 사용하십시오. – LogicStuff

+2

그 물건의 아무 것도 정말로 말이되지 않습니다. –

답변

-4

오류 메시지에서 do_something_more라는 객체를 선언하지 않았습니다. 이것은 foo 클래스의 메소드입니다. 시도해보십시오. cout<<a.do_something_more();

이 경우에도 작동 여부는 확실하지 않습니다.

+2

먼저 시도해보십시오. – LogicStuff

+0

뭐라 구요? – Javi