typedef可能是未声明或含糊不清的

时间:2015-09-08 13:11:44

标签: c struct

在头文件中,我有一个结构:

#ifndef _MY_STRUCT_
#define _MY_STRUCT_
struct myStruct{
   char c1[1];
   char c2[10];
   char c3[10];
}

typedef myStruct MYSTRUCT;
#endif

在另一个头文件中这个结构:

#include "my_struct.h"
struct another_struct{
    int val1;
    MYSTRUCT strct;
};

编译此代码时,我收到以下消息:

The text "strct" is unexpected. MYSTRUCT may be undeclared or ambiguous.

对我来说,两个结构都很好。我无法理解为什么编译器会抱怨这个。

感谢您的帮助。

2 个答案:

答案 0 :(得分:9)

您应该在typedef时遇到错误,因为您错过了struct关键字。它应该是

typedef struct myStruct MYSTRUCT;
//      ^^^^^^
// Note the `struct` keyword here

结构末尾缺少的分号不会让编译器更快乐。

答案 1 :(得分:5)

这就是我认为它应该如何完成

#ifndef _MY_STRUCT_
#define _MY_STRUCT_
typedef struct {
   char c1[1];
   char c2[10];
   char c3[10];
} MYSTRUCT;

#endif

,另一个文件保持不变。