无法访问函数返回的struct元素 - 解除引用指向不完整类型的指针

时间:2010-09-13 11:11:38

标签: c pointers struct

我是C.的新手。这是我正在处理的文件和代码。我试图调用一个函数(refineMatch)在main函数的单独文件中实现。 function refineMatch返回一个struct。我在编译与访问返回结构中的元素相关的代码时遇到问题。 main.c文件中发生编译错误。下面的代码显示了错误发生的位置。

refine.h

#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

struct matchingpair{
    CvPoint p1, p2;
};    

struct matchingpair_array{   
    struct matchingpair* elements;  
    int length;
};

struct matchingpair_array *refineMatch(struct matchingpair* pairs,int pointcount, int bestpair);

refine.c

#include "refine.h"
#include "utils.h"
#include <stdlib.h>

struct matchingpair_array *refineMatch(struct matchingpair* pairs,int pointcount, int bestpoint){
    struct matchingpair_array refinedPairs;
    refinedPairs.elements=malloc(incount*sizeof(struct matchingpair));
    int *in=malloc(pointcount*sizeof(int)), i=0,incount=8;

    // several statements - including filling in[] with data

    for(i=0;i<incount;i++){ 
        refinedPairs.elements[i]=pairs[in[i]];
        fprintf(stderr,"%d\n",in[i]);
    }
    refinedPairs.length=incount;
    free(in); 
    // several other free() operations non include refinedPairs or elements
    return &refinedPairs;
}

的main.c

#include "refine.h"
#include <stdio.h>

int main( int argc, char** argv ){
    struct matchingpair* pairs;
    int matchcount=0,bestpair;
    pairs=(struct matchingpair*)malloc(pairArrSize*sizeof(struct matchingpair));

    //values are assigned to pairs, matchcount and bestpair

    struct matcingpair_array* result=(struct matcingpair_array*)refineMatch(pairs,matchcount,bestpair); /*(casting removed this warining)
    warning: initialization from incompatible pointer type*/
    fprintf(stderr,"%d \n",result->length); //error: dereferencing pointer to incomplete type

    //some other code

}

请解释一下我在这里做错了什么。我正在使用gcc 谢谢。

1 个答案:

答案 0 :(得分:2)

refineMatch()不会返回struct。它返回指向struct matchingpair_array的指针。

matcingpair_arraymathcingpair_array不同:它缺少h