1

定義した構造体のフィールドにアクセスしようとしたときに、このエラーが発生しました。

struct linkNode{
    struct linkNode *next;
    char *value;
};

ヘッダーファイルで、linkNode_tというタイプを定義しました。

typedef struct linkNode linkNode_t;

この構造体を別のファイルのメインで使用しようとしたとき、実行しようとしたときを除いて、他のすべては問題ありませんでした

linkNode_t* currentpath = /*a pointer to a struct of type linkNode_t*/
int something = strlen(currentpath->value);/****ERROR*****/

コンパイラが不完全な型エラーを出しました。構造体を適切に宣言していますか?

4

3 に答える 3

1

他の人が指摘したように、一般的には、「typedef」と構造体定義をすべて同じ場所に配置することをお勧めします。

しかし、それは必須ではなく、それは問題ではありません。

このテスト ケースは正しくコンパイルおよび実行されます。

#include <stdio.h>
#include <string.h>

#define NULL 0

struct linkNode{
    struct linkNode *next;
    char *value;
};

typedef struct linkNode linkNode_t;

linkNode_t rec = {
  NULL,
  "abcdef"
};

int
main (int argc, char *argv[])
{

  linkNode_t* currentpath = &rec;
  int something = strlen(currentpath->value);
  printf ("sizeof (rec)= %d, currentpath->value= %s, something= %d...\n", 
    sizeof (rec), currentpath->value, something);
  return 0;
}

実際の問題と解決策:

1) あなたはすべて正しいことをしています。

2) 「typedef」を構造体定義の後に (または、少なくともその一部として) 配置するようにしてください。

struct linkNode{
...
};

typedef struct linkNode linkNode_t;
于 2013-01-28T05:50:46.810 に答える
0
struct linkNode{
    struct linkNode *next;
    char *value;
};

構造体内で直接構造体を使用できないため、これは不完全です。

あなたは使用する必要があります

typedef struct linkNode{
    struct linkNode *next;
    char *value;
}new_name;
于 2013-01-28T05:46:08.730 に答える