2012-02-01 48 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-> operator <<(p2); ? – tgmath 2012-02-01 11:54:51

回答

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。