在C中重新声明为不同类型的符号错误

时间:2013-11-15 23:15:23

标签: c struct typedef

我在以下C代码中将错误'J_TypeInstructions'重新声明为不同类型的符号':

struct _J_TypeInstructions {
    const char *instructionName;
} J_TypeInstructions[] = { { "j", "000010" } };
//typedef struct _J_TypeInstructions J_TypeInstructions;

2 个答案:

答案 0 :(得分:2)

尝试改为:

struct _J_TypeInstructions {
    const char *instructionName;
} J_TypeInstructions[] = { {"j"}, {"000010"} };

                          /*   ^  ^  */

并且不要使用_J_TypeInstructions之类的标记名称作为以_[A-Z]*开头的标识符在C中保留。

编辑:我错过了评论专栏是问题的一部分:

typedef struct _J_TypeInstructions J_TypeInstructions;

您已经声明了一个标识为J_TypeInstructions的变量。您不能在同一范围内声明与变量名称相同的类型,因为变量和类型名称的标识符位于同一名称空间中。更改变量的名称以解决问题。

答案 1 :(得分:1)

J_TypeInstructions不能同时为变量名和类型。

首先,您创建了一个名为J_TypeInstructions

的变量(_J_TypeInstructions结构数组)

然后您尝试使用与先前定义的数组相同的名称定义类型。

另外,正如他的回答中提到的 ouah ,修复你的大括号,因为你现在使用它们的方式是尝试初始化一个带有2个值的char *,并且这会给你一个警告。