C 通过函数向结构传递指针
嗨,你能帮我解决C中的一个错误吗? 我有两个源文件和一个头文件。 一个源是main,另一个源充满函数,头包含函数声明 这是主要的C 通过函数向结构传递指针,c,C,嗨,你能帮我解决C中的一个错误吗? 我有两个源文件和一个头文件。 一个源是main,另一个源充满函数,头包含函数声明 这是主要的 #include <stdio.h> #include <stdlib.h> #include <string.h> #include "fundeclarationheader.h" int main() { InfoSessionPtr MySession=NULL; My Session = Session; func
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "fundeclarationheader.h"
int main() {
InfoSessionPtr MySession=NULL;
My Session = Session;
function(MySession->Tab);
return 0;
}
现在这是标题
typedef struct InfoSession *InfoSessionPtr;
typedef struct TabNode *TabNodePtr;
typedef struct SiteNode *SiteNodePtr;
void function(TabNodePtr);
这里的问题是,当试图调用main中的“函数”时,我收到一条GCC消息:取消对不完整类型的引用指针尝试合并头文件和源文件
在执行typedef之前,需要在标头中声明Struct。因此,如果可以将两者结合起来,这应该可以很好地工作。编译器在编译main.c时如何知道InfoSession结构包含什么?您需要将结构定义放在头文件中,然后#将其包含在两个源文件中。无法合并它们,因为这是一个需要封装的练习。此外,如果我删除函数调用,它工作正常 此外,
MySession = Session
行不正确,因为我更改了代码以便向u演示
这就是为什么在真实的程序中,我使用了一个函数,该函数存在于返回会话的另一个源文件中,因此一切都很顺利
唯一的问题是“function”调用的问题至少这个,
My Session=Session代码>似乎无效。永远不要使用typedef
数据指针!或者不要尝试声明实例或访问实例的成员。您可以通过声明struct
s来实现不透明类型,而不提供它们的主体,就像OP的代码那样,但是您不能对它们执行任何需要了解其成员和布局的操作。主要是,您可以存储指针并将其传递给其他人,包括传递给可能不不透明的函数。不能这样做,因为这是一个需要封装的练习。此外,如果我删除函数调用,它工作正常
MySession = Session