0

我在访问另一个结构中的 char* 时遇到问题,代码如下:

用户网络.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;
};

为什么我会收到这个错误?

4

1 回答 1

5

当您SocialNetwork_t在实现文件SocialNetwork.c中定义结构时,编译器在编译User_Network.c时无法知道结构的内容,如果您只使用#include <SocialNetwork.h那里。编译器解析头文件SocialNetwork.h并知道它应该SocialNetwork_t稍后找到结构的定义,但在编译 .h 中的取消引用时不会遇到该定义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。因此,它无法知道您实际指的是哪种类型。

于 2012-04-20T15:16:12.843 回答