我的Utils
类中有静态方法
这是定义
/*static*/ void Utils::copy_files(void(*progress_callback)(int, int),
std::string const & path_from,
std::string const & path_to)
{
....
}
在这里使用
void TV_DepthCamAgent::progress_callback(int count, int copied_file)
{
printf("Progress :: %d :: %d\n", count, copied_file);
}
void TV_DepthCamAgent::foo()
{
...
shared::Utils::copy_files(progress_callback, path_from_copy, path_to_copy);
...
}
这是我得到的错误
E0167类型的参数“ void(TV_DepthCamAgent :: )(int count,int copyed_file)”与类型“ void()(int,int)”的参数不兼容
错误C3867'TV_DepthCamAgent :: progress_callback':非标准语法;使用“&”创建指向成员的指针
我在做什么错了?
答案 0 :(得分:3)
由于您已标记此C ++,所以我假设您需要C ++解决方案。
自C ++ 11起,我们可以使用.
来代替笨拙的C风格的函数指针语法。
所以std::function
变成void(*progress_callback)(int, int)
关于为什么会出现该错误,是因为要传递函数指针,必须通过引用传递函数
std::function<void(int, int)> progress_callback
然后在...
shared::Utils::copy_files(&progress_callback);
...
中调用时必须传递必需的参数。
您应该为此使用copy_files
和std::function
而不是您似乎正在编写的C风格