我收到此错误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) ;
答案 0 :(得分:5)
您正在使用C ++编译器进行编译,该编译器不允许在没有强制转换的情况下将void *
转换为其他类型。
您可以添加演员:
obj = static_cast<TrackedObj *>(malloc(sizeof *obj)) ;
或者,改为使用new
:
obj = new TrackedObj;
请务必使用delete
释放分配了new
的内存。
如果您将源文件重命名为.c
扩展名而不是.cpp
,则Visual C ++编译器(我假设基于C2440
错误代码)应该编译源代码作为C,不需要malloc
的演员。
答案 1 :(得分:1)
C允许从void*
到其他指针类型的隐式转换。 C ++没有。
决定您要使用的语言。对于C,请确保您的编译器知道您的代码是C.对于C ++,要么添加强制转换,要么使用new
(后者更可取)。
答案 2 :(得分:0)
obj = (TrackedObj *)malloc(sizeof *obj) ;
答案 3 :(得分:0)
obj = static_cast<TrackedObj *>(malloc(sizeof *obj)) ;
这对我有用。