1

我收到此错误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) ;       
4

4 回答 4

6

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

您可以添加演员表:

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

或者,new改用:

obj = new TrackedObj;

确保用于delete释放分配给new.

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

于 2013-06-19T02:59:22.187 回答
1

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

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

于 2013-06-19T03:01:36.880 回答
0
obj = (TrackedObj *)malloc(sizeof *obj) ;  
于 2013-06-19T03:00:52.727 回答
0
obj = static_cast<TrackedObj *>(malloc(sizeof *obj)) ;  

这对我有用。

于 2020-10-08T06:01:02.887 回答