2012-07-09 9 views
4

내 클래스 중 하나에서 operator()가 오버로드되어 다른 멤버 함수에서 사용하고 싶습니다.멤버 함수에서 operator() 사용

class A { 
public: 
    void operator()(); 
    void operator()(double x); 
}; 

void A::operator()() { 
    // stuff 
}; 

void A::operator()(double x) { 
    // stuff with other members and x 
    this->operator(); 
}; 

라인 this->operator()이 작동하지 않습니다. 난 그냥 내 클래스 A의 멤버 함수로 정의 된 연산자를 사용하고 싶다. 내가 오류는 다음과 같습니다 Error 1 error C3867: 'A::operator()': function call missing argument list; use '&A::operator()' to create a pointer to member

+4

대신에'(* this)()'을 (를) 사용해 보셨습니까? – dasblinkenlight

+0

정말 고마워요! – vanna

답변

9

를 작성해야 :

void A::operator()(double x) { 
    // stuff with other members and x 
    this->operator()(); 
}; 

첫 번째 () 운영자의 이름이고, 두 번째는 전화 자체입니다 : 그에서 누락 (빈) 인수 목록입니다 오류 메시지

+0

수정 됨. 복사/붙여 넣기 문제였습니다. 문제는 다른 멤버 함수에서 operator()를 사용하는 것입니다. – vanna

0

포인터 - 투 - 개체에서 멤버 함수를 호출하는 구문은 다음과 같습니다 당신이

ptr->operator()(); 

또는 다른 변형에 대한 쓰기하려는 귀하의 케이스 부재 이름으로

ptr->memberName(); 

operator()입니다

ptr->operator()(1.0); // operator() accepting single argument of type double 

operator() 정의와 동일합니다. 한 쌍의 부모를 사방에 내다. 엄지

0

규칙 :

운영자 오버로딩 함수의 이름은 @가 과부하되는 연산자와 항상[email protected]이다.

operator-overload-function을 이름으로 직접 호출하려면 [email protected](params)을 입력하고 operator() (...)을 입력하십시오.

관련 문제