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 に答える