error: invalid use of non-static member function ‘void SampleProcess::frameprocess(const aclmdlDataset*, PicDesc&, int, int)’ if (pthread_create(&frameprocessparam._id,0, frameprocess, &frameprocessparam) == 0)
时间: 2024-01-02 16:02:29 浏览: 190
这个错误出现的原因是您在使用 pthread_create() 函数时,第三个参数 frameprocess 被认为是一个非静态成员函数,而它需要一个静态成员函数或全局函数作为参数。这是因为非静态成员函数有一个隐式的 this 指针,而 pthread_create() 函数的第三个参数需要是一个指向函数的指针,而不是指向对象的指针。
要解决这个问题,您可以将 frameprocess 函数改为静态成员函数,或者将其定义为全局函数。如果您选择将其定义为静态成员函数,则可以在函数声明和定义中都使用 static 关键字来将其声明为静态成员函数。
示例代码:
```
class SampleProcess {
public:
static void* frameprocess(void* param);
};
void* SampleProcess::frameprocess(void* param) {
// 实现代码
}
// 在使用 pthread_create() 函数时,可以这样调用:
SampleProcess process;
pthread_create(&frameprocessparam._id, 0, &SampleProcess::frameprocess, &process);
```
请注意,在定义静态成员函数时,不能使用 this 指针,因为它只能在非静态成员函数中使用。
相关问题
error: storage class specifiers invalid in parameter declarations Result Postprocess(static int sockfd, const aclmdlDataset* modelOutput, PicDesc &picDesc, int modelWidth, int modelHeight);
在函数参数声明中使用存储类别说明符(static, extern等)是无效的,因为参数的存储类别是由函数定义中的参数列表确定的。因此,您需要在函数声明中删除static关键字,即:
Result Postprocess(int sockfd, const aclmdlDataset* modelOutput, PicDesc &picDesc, int modelWidth, int modelHeight);
阅读全文