我在访问另一个结构中的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
}
以下是我在 SocialNetwork.h 中的内容:
typedef struct SocialNetwork_t* SocialNetwork;
SocialNetwork.c 中的结构:
struct SocialNetwork_t {
char *Name;
};
为什么我会收到错误?
答案 0 :(得分:5)
在实现文件 SocialNetwork.c 中定义结构SocialNetwork_t
时,编译器在编译 User_Network.c <时无法知道结构的内容。 / strong>,如果你只使用#include <SocialNetwork.h
那里。编译器解析头文件 SocialNetwork.h 并知道它应该稍后找到struct SocialNetwork_t
的定义,但是在编译{{1中的解除引用时不会遇到该定义}}。因此,将完整的结构定义放入 SocialNetwork.h 。
[更新] 我会详细说明这个答案。我猜您的文件 User_Network.c 如下所示:
void aaa(...)
当你的编译器编译它时,预处理器用这个文件的内容替换`#include“SocialNetwork.h”,它给你:
#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
}
这将是编译器启动实际编译时的完整文件。因此,当您尝试从/* 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
}
访问Name
字段时,编译器没有看到结构,只看到指针类型的typedef。因此,它无法知道您实际指的是哪种类型。