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

2

在执行 typedef 之前,必须在 header 中声明 Struct。您可以将两者结合起来:

typedef struct linkNode {
    struct linkNode *next;
    char *value;
} linkNode_t;
于 2013-01-28T05:43:08.640 回答
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;
};

这是不完整的,因为您不能直接在结构内部使用 struct。

你应该使用

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