-2

問題のある行:

void deleteController(Controller* ctrl) {
    ...  
    destroy(ctrl->repo);
    ...
}

互換性のないポインター型から 'destroy' の引数 1 を渡す [デフォルトで有効]

問題関数のヘッダー:

void destroy(Vector* v);

コントローラー構造体:

typedef struct {
    TransRepository* repo;
} Controller;

TransRepository 構造体:

typedef struct {
    Vector* TList;  
    char* fileName;
} TransRepository;

ベクトル構造体

typedef struct {     
    TElem* elems;   // vector elements   
    int len;        // #of elements from the vector      
    int capacity;   // maximum capacity of the vector

    CmpFun cmp;     // comparison function for two generic elements 

    CpyFun cpy;     // cloning function for a generic element    
    DelFun del;     // deallocation function for a generic element  
} Vector;

追加の定義:

typedef void* TElem;
typedef int (*CmpFun)(TElem, TElem);
typedef TElem (*CpyFun)(TElem);
typedef void (*DelFun)(TElem);

のパラメータの型を destroy() 変えようと思ったのですがうまくいかないので、関数が必要なものを見つけられないのではないかと考えて、パラメータ部分に別のフィールドを追加しました。

destroy(ctrl->repo->TList);

エラーは消えましたが、正しいことをしたというあなたからの確認を待っています(:

4

1 に答える 1

1

ええ...destroy関数は言う:

void destroy(Vector* v); // I want a pointer to a Vector

あなたはそれを与えました:

destroy(ctrl->repo); // A TransRepository pointer

もちろん、それは幸せではありませんでした。構造体にはベクターへのポインターが含まれているためTransRepository、答えは「はい」です。修正それを渡すことでした。

destroy(ctrl->repo->TList);

コードの残りの部分が表示されない場合は、正しいことをしたと思います。

于 2013-04-08T14:23:47.907 に答える