Base::Define
принимает два аргумента: Foo* desktop
и неявный Base* this
.Вам нужно будет связать текущий this
в пределах Oblem
, чтобы получить функцию, которая принимает только Foo
.Кроме того, Define
должен принимать свой параметр как Foo& desktop
(или еще лучше, если это реальный код, Foo const& desktop
).
Полное решение, использующее стандартные функциональные возможности в TR1 (или реализацию Boost).за это) будет:
void Define(Foo const& desktop) const
{
cout << desktop.name << " " << desktop.val << "\n";
}
void Oblem() const
{
for_each(
array.begin(), array.end()
, std::bind( &Base::Define, this, _1 )
);
}