C++成员函数赋值给C的函数指针的采坑录
最近做⼀个banana Pi M1+的硬解码器封装成类的时候,由于是依赖ffmpeg的,⽽ffmpeg是C 实现的,本来demo 都是直接⽤C写的,测试也没有问题,想着封装也不会有问题,⾄少⾃⼰对C++类还是⽐较理解的(⾄少⽤于封装Android SDK还是很多次了)。
就开始封装吧,我就直接把⽤到的全局变量和函数分别放到定义的类中,然后整理完后,直接编译,喔,报错!!然后查看错误,提⽰指针函数不符合,类型不对,类成员函数有个类,因为的确有⾏代码是把⼀个函数赋值给ffmpeg 结构体⾥⾯的函数指针(这也是ffmpeg的⼀种实现标准了),于是我就想着怎么赋值呢,怎么强制都不⾏,那就百度吧,果然有前辈,使⽤静态成员函数,“静态成员函数”:static 修饰,相当于在这个类作⽤域的全局函数,所以成员函数可以任意访问静态成员函数;于是在类中把要赋值给ffmpeg的函数定义成静态成员函数,编译报错!!因为刚刚定义的静态成员报错有个成员变量未定义,原来静态成员函数不能访问⾮静态成员变量,因为类的⾮静态成员都需要默认⼀个this指针才能访问的,想想也对,平时都是想new ⼀个对象 ,然后继续访问成员变量的。但是静态成员函数是全局的,定义时就有效,去访问⼀个⽆效的东西,的确会报错没有定义。
指针函数的作用怎么解决呢?把静态成员函数访问的成员变量,定义成静态的。但是编译还是会报错,为什么呢?因为在类⾥⾯的静态变量在类⾥⾯只是声明,并没有初始化定义,所以再在类外⾯初始化类的静态成员变量就好,终于解决了。
希望我的说法没有错,这是我花了⼀个⼩时搞好的,开始太⼩看C++了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。