2016-11-20 3 views
-4

Я пытаюсь перегрузить оператора < < на функцию. Я застрял в течение нескольких часов, пытаясь понять это. Я нашел много примеров, как это сделать в Ostream, но ни одна из них не была нацелена на мою конкретную проблему.Попытка перегрузки << функция класса

#include <iostream> 

class foo 
{ 
public: 
    foo& operator<< (foo& (*pf)(foo&)) 
    { 
    return pf(*this); 
    } 
    foo& do_something_more(foo& os) 
    { 
    return os; 
    } 
}; 

ostream& do_something(ostream& os) 
{ 
    os << "1." << "\n" << "2."; 
    return os; 
} 

int main() 
{ 
    foo a; 

    std::cout << do_something; // this works 
    a << do_something_more; // this do not 

    system("pause"); 
    return 0; 
} 

Это один из примеров того, как я пытался это решить. Я получаю ошибку 'do_something_more': незарегистрированный идентификатор в этом.

Спасибо за помощь!

+1

'do_something_more()' является функцией-членом 'foo' и вам нужен экземпляр для его вызова. –

+0

Или сделайте его статическим и используйте 'a << foo :: do_something_more;' ... или просто не-член. – LogicStuff

+2

Ничего подобного не имеет смысла. –

ответ

-4

Как говорится в ошибке, вы не указали какой-либо объект, называемый do_something_more. Это метод в вашем классе foo. Попробуйте cout<<a.do_something_more();

Даже при этом я не уверен, будет ли это работать.

+2

Сначала попробуйте. – LogicStuff

+0

Прошу прощения? – Javi

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

  • Нет связанных вопросов^_^