2012-02-01 4 views
0

나는이 같은 클래스의 연산자를 정의하기 위해 노력하고있어 :C++ 연산자 예기치 않은 오류

file.h

bool operator<<(XMLPair *p2); 

file.cpp

bool XMLPair::operator<<(XMLPair *p2) 
{ 
.... 
} 

내가 사용하려고 그것과 같은 주 프로그램에서

XMLPair *p1, *p2 ; 
... 
p1<<p2 

그것은 말합니다

error: invalid operands of types ‘XMLPair*’ and ‘XMLPair*’ to binary ‘operator<<’ 

어떤 생각?

+1

사용하지 않아야합니다. (* p1) << p2; 또는 p1-> 연산자 << (p2); ? – tgmath

답변

1

좌변 객체, 그리고 포인터이어야 시도 :

(*p1) << p2; 
3

p1는 포인터입니다; 멤버 연산자의 왼쪽 인자는 반드시 객체 여야합니다. 그래서 당신이 필요합니다

(*p1) << p2; 

오른쪽 인수가 참조로, 그리고 당신이 정말로해야 할 경우에만 포인터를 사용하는 것이 더 관용적 될 것이지만 :

당신은 포인터를 선언
// Remove `const` as necessary, if the operator needs to modify either operand 
bool operator<<(XMLPair const & p2) const; 

XMLPair p1, p2; 
p1 << p2; 
0

에 p1을 호출하고 포인터에 대해 연산자를 호출합니다. p1 대신 (* p1)에서 연산자를 호출하십시오.