我收到此错误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)) ;
这对我有用。