C参数传递 - 提出解决方案

时间:2013-04-08 14:15:41

标签: c eclipse-cdt

有问题的一行:

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

从不兼容的指针类型[默认启用]

传递'destroy'的参数1

问题函数的标题:

void destroy(Vector* v);

Controller struct:

typedef struct {
    TransRepository* repo;
} Controller;

TransRepository struct:

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

Vector struct

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);

错误消失但我正等着你确认我做对了(:

1 个答案:

答案 0 :(得分:1)

是的...... destroy函数说:

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

你给了它:

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

所以当然不开心。由于TransRepository结构包含指向Vector的指针,答案是肯定的,修复 应该通过它:

destroy(ctrl->repo->TList);

没有看到任何其他代码,我会说你做了正确的事。