gpt4 book ai didi

c - 取消引用指向不完整类型的指针 - 指向 char* 的指针出错

转载 作者:太空宇宙 更新时间:2023-11-04 06:06:04 25 4
gpt4 key购买 nike

我在访问另一个结构中的 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;
};

为什么会出现该错误?

最佳答案

当您定义结构时 SocialNetwork_t在实现文件SocialNetwork.c中,如果只使用#include <SocialNetwork.h,编译器在编译User_Network.c时无法知道struct的内容。那里。编译器解析头文件SocialNetwork.h 并知道它应该找到结构SocialNetwork_t 的定义。稍后,但在编译 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
}

当你的编译器编译它时,预处理器用那个文件的内容替换`#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
}

这将是编译器开始实际编译时的完整文件。因此,当您尝试访问 Name来自 struct SocialNetwork 的字段,编译器没有看到结构,只有指针类型的 typedef。因此它无法知道您实际指的是哪种类型。

关于c - 取消引用指向不完整类型的指针 - 指向 char* 的指针出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10248853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com