【发布时间】:2015-12-02 00:19:59
【问题描述】:
我创建了一个复数结构并编写函数来创建它,如下所示:在 Complex.c:
typedef struct Complex
{
double m_re;
double m_im;
}Complex;
ComplexP fromCharFunc(char *s)
{
double *values = extractValuesFromString(s);
if(values == NULL)
{
return NULL;
}
double re = values[0], im = values[1];
free(values);
return createComplexNumber(re, im);
}
static ComplexP createComplexNumber(double re, double im)
{
ComplexP complexNumber = (ComplexP)malloc(sizeof(Complex));
complexNumber->m_re = re;
complexNumber->m_im = im;
return complexNumber;
}
这在 Complex.h 中:
typedef struct Complex* ComplexP;
为了检查我所做的是否正常,我在 Complex.c 文件中创建了一个主函数并调用了
ComplexP a = fromCharFunc("0,1i");
a->m_im = 3;
一切正常。
但是当我在另一个 .c 文件中这样做时:
#include "Complex.h"
#include <stdio.h>
#include <stdlib.h>
并且使用相同的主函数,它在主函数的第二行给了我这个错误:“取消引用指向不完整类型的指针”。我在另一篇文章中读到了它,那里的人说没有分配内存......但我确实分配了内存并且它没有发生在 Complex.c 文件中。
请帮忙。谢谢
编辑:我不允许更改头文件。学校作业
【问题讨论】:
-
既然头文件是固定的,那就贴吧。里面的某些else是有用的。
-
那里没有其他相关的东西。只是一些我还没有机会在我的新 .c 文件中调用的方法。分配内存和创建此结构的变量并不重要。
-
如果您无法更改标题,则必须创建访问功能才能获取成员。除非您可以看到结构定义,否则您无法访问成员 - 并且标头中的 opaque 类型不允许这样做。标头中的一些未实现的函数可能提供了您需要的访问权限。
-
正是那些“我还没有机会调用的方法”才是问题的解决方案。
-
我理解@JonathanLeffler 回答的问题。谢谢大家!
标签: c pointers struct forward-declaration