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

void *キャストなしで他の型に変換できない C++ コンパイラでコンパイルしています。

次のいずれかのキャストを追加できます。

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

または、new代わりに次を使用します。

obj = new TrackedObj;

deleteで割り当てられたメモリを解放するために必ず使用してくださいnew

ソース ファイルの名前を.c拡張子..cppC2440malloc

于 2013-06-19T02:59:22.187 に答える
1

void*C では、から他のポインター型への暗黙的な変換が許可されています。C++ にはありません。

使用する言語を決定します。C の場合は、コードが C であることをコンパイラが認識していることを確認してください。C++ の場合は、キャストを追加するか使用しますnew(後者が望ましい)。

于 2013-06-19T03:01:36.880 に答える
0
obj = (TrackedObj *)malloc(sizeof *obj) ;  
于 2013-06-19T03:00:52.727 に答える