2014-12-08 3 views
3
class Parent 
{ 
    ... 
    friend ostream& operator<<(ostream&, const Parent&); 
}; 

class Child : public Parent 
{ 
    ... 
    friend ostream& operator<<(ostream&, const Child&); 
}; 

ostream& operator<< (ostream& os, const Parent& p) 
{ 
    os << ... ; 
    return os; 
} 

ostream& operator<< (ostream& os, const Child& c) 
{ 
    os << c.Parent << ... ; // can't I access the subobject on this way? 
    return os; 
} 

Как я могу назвать оператора родителя внутри оператора Child? Это просто дает мне ошибку «недопустимое использование Parent :: Parent»Доступ анонимный Субъект C++ (cout)

+3

'ОС << static_cast (с)' –

+4

@PiotrS. Сделайте это ответом. –

ответ

4

c.Parent не является допустимым синтаксисом, и ваша operator<< не является функцией-членом. Для того, чтобы вызвать правильную перегрузку, изменить контекст c:

ostream& operator<<(ostream& os, const Child& c) 
{ 
    os << static_cast<const Parent&>(c); 
    return os; 
} 
Смежные вопросы