1

我是整个 C 语言的新手,但我的代码不断出现这个错误

UArray2.c:19:error: request for member ‘i’ in something not a structure or union

这显然是我主要功能中的 uarray.i,但我不明白为什么它没有看到它。

这是我的 .h 文件。不太有趣...

//UArray2.h
#include <stdlib.h>
#include <stdio.h>
#ifndef UARRAY2_INCLUDED
#define UARRAY2_INCLUDED
#define T UArray2_T
typedef struct T *T;

#undef T
//#undef UARRAY2_INCLUDED //undef?                 
#endif

这是我的 .c 文件。很简单的东西。

//UArray.c                                              
#include <stdlib.h>
#include <stdio.h>
#include "UArray2.h"
#define T UArray2_T

struct T{
     int i;
};

int main()
{
     UArray2_T uarray;
     uarray.i=0;
     return 0;
}
#undef T

那么,有没有人知道我为什么会收到这个编译错误?这可能是我做的一些愚蠢的事情。

4

2 回答 2

4

在你的头文件中

typedef struct T *T;

这意味着当您声明变量时,uarray您实际上是在声明一个指针。所以你应该将i成员初始化为

uarray->i = 0;

然而,这很可能会崩溃,因为指针未初始化并且可以指向内存中的任何位置。为指针分配内存

UArray2_T uarray = malloc(sizeof(*uarray));

或者让它指向另一个结构

struct UArray2_T real_uarray;
UArray2_T uarray = &real_uarray;
于 2012-09-18T06:00:31.300 回答
0

我认为初始化存在问题,因为您使用的是头文件中的指针。

    typedef struct T *T;

您实际上是通过声明 uarray 来指向内存位置。尝试纠正这个错误。

于 2012-09-18T06:16:16.583 回答