effective C++ item 35 例程编译不通过!求指教!解决方案

effective C++ item 35 例程编译不通过!求指教!
源代码如下:
#include <iostream>
#include <iomanip>
//#include <memory>
#include <functional>
class game_character;
int default_health_calc(const game_character& gc);
class game_character{
public:
typedef std::tr1::function<int(const game_character&)> health_calc_func;
explicit game_character(health_calc_func hcf = default_health_calc)
:health_func(hcf)
{}
int health_value()const
{
return health_func(*this);
}
private:
health_calc_func health_func;
};
short calc_health(const game_character&)
{
std::cout << "short calc_health() " << std::endl;
return 0;
}
struct health_calculator{
int operator()(const game_character&)const
{
std::cout << "the struct health_calculator int operator()" << std::endl;
return 0;
}
};
class game_level{
public:
float health(const game_character&) const
{
std::cout << "the class game_level float health()" << std::endl;
return 0;
}
};
class evil_bad_guy :public game_character{
public:
explicit evil_bad_guy(health_calc_func hcf = default_health_calc)
:game_character(hcf)
{}

};
class eye_candy_character :public game_character{
public:
explicit eye_candy_character(health_calc_func hcf = default_health_calc)
:game_character(hcf)
{}
};

int main()
{
evil_bad_guy ebg1(calc_health);//short calc_health()
ebg1.health_value();
eye_candy_character ecc1(health_calculator());
//ecc1.health_value();//有错误!the struct health_calculator int operator()
game_level current_level;
evil_bad_guy ebg2(std::tr1::bind(&game_level::health, current_level, std::tr1::placeholders::_1));
ebg2.health_value();//the class game_level float health()
}

ecc1.health_value();这一行有错误,请问是调用格式不对吗?
请各位不吝指教,谢谢!
------解决方案--------------------
just want to close it !effective C++ item 35 例程编译不通过!求指教!解决方案