2012-02-01 5 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.

Смежные вопросы