Oma*_*mar 0 c pointers dereference
我在访问另一个结构中的char*时遇到问题,继承代码:
User_Network.c:
struct User_Networks_t {
SocialNetwork network;
};
typedef struct User_Networks_t* User_Networks;
void aaa(User_Networks u1)
{
u1->network->Name = "test"; /// ERROR: dereferencing pointer to incomplete type
}
Run Code Online (Sandbox Code Playgroud)
这是我在SocialNetwork.h中的内容:
typedef struct SocialNetwork_t* SocialNetwork;
Run Code Online (Sandbox Code Playgroud)
SocialNetwork.c中的结构:
struct SocialNetwork_t {
char *Name;
};
Run Code Online (Sandbox Code Playgroud)
为什么我会收到这个错误?
当你定义你的结构SocialNetwork_t
在实现文件SocialNetwork.c,编译器无法知道当编译该结构的内容User_Network.c,如果你只使用#include <SocialNetwork.h
那里.编译器解析头文件SocialNetwork.h并知道它应该SocialNetwork_t
稍后找到struct的定义,但是在编译dereference时不会遇到该定义void aaa(...)
.因此,将完整的结构定义放入SocialNetwork.h中.
[更新]我将详细说明这个答案.我想你的文件User_Network.c看起来像这样:
#include "SocialNetwork.h"
struct User_Networks_t {
SocialNetwork network;
};
typedef struct User_Networks_t* User_Networks;
void aaa(User_Networks u1)
{
u1->network->Name = "test"; /// ERROR: dereferencing pointer to incomplete type
}
Run Code Online (Sandbox Code Playgroud)
当你的编译器编译它时,预处理器用这个文件的内容替换`#include"SocialNetwork.h",它给你:
/* START content from the included file */
typedef struct SocialNetwork_t* SocialNetwork;
/* END */
struct User_Networks_t {
SocialNetwork network;
};
typedef struct User_Networks_t* User_Networks;
void aaa(User_Networks u1)
{
u1->network->Name = "test"; /// The struct SocialNetwork is not defined here
}
Run Code Online (Sandbox Code Playgroud)
这将是编译器启动实际编译时的完整文件.因此,当您尝试从中访问该Name
字段时struct SocialNetwork
,编译器没有看到结构,只看到指针类型的typedef.因此,它无法知道您实际指的是哪种类型.