内存分配错误 - malloc:无法将 void* 转换为结构指针



我收到此错误error C2440: '=' : cannot convert from 'void *' to 'TrackedObj *'

我的 TrackedObj 结构如下所示:

typedef struct {
    IplImage* hsv;    
    IplImage* hue;    
    IplImage* mask;   
    IplImage* prob;    
    CvHistogram* hist; 
    CvRect prev_rect;  
    CvBox2D curr_box;  
} TrackedObj; 

我的代码 :

TrackedObj *obj ;
obj = malloc(sizeof *obj) ;       

您正在使用C++编译器进行编译,该编译器不允许在没有强制转换的情况下将void *转换为其他类型。

您可以添加演员表:

obj = static_cast<TrackedObj *>(malloc(sizeof *obj)) ;       

或者,改用new

obj = new TrackedObj;

确保使用 delete 释放分配的内存 new

如果将源文件重命名为具有.c扩展名而不是.cpp,则Visual C++编译器(我根据C2440错误代码假设此编译(应将源代码编译为C,并且不需要malloc的强制转换。

C 允许从 void* 到其他指针类型的隐式转换。C++没有。

确定要使用的语言。对于 C,请确保您的编译器知道您的代码是 C。对于C++,添加强制转换或使用new(后者更可取(。

obj = (TrackedObj *)malloc(sizeof *obj) ;  
obj = static_cast<TrackedObj *>(malloc(sizeof *obj)) ;  

这对我有用。

相关内容

  • 没有找到相关文章

最新更新