-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 回答