嗨,我有以下功能。
void turnRight(enum Direction heading, int x, int y){
if(y<=49 && heading==TORIGHT){
heading=TODOWN;
x=x+1;
}
else if(x<=49 && heading==TODOWN){
heading=TOLEFT;
y=y-1;
}
else if(x>0 && heading==TOLEFT){
heading=TOUP;
x=x-1;
}
else if(y<=49&&heading==TOUP){
heading=TORIGHT;
y=y+1;
}
else
printf("Can not turn right! Boundary alert!");
}//end function
我在main中声明枚举为:
enum Direction {TODOWN, TOUP, TORIGHT, TOLEFT};
static enum Direction heading;
heading=TORIGHT;
我正在使用
从main调用此函数turnRight(heading, x, y);
最重要的是我将原型添加为:
void turnRight(enum Direction heading, int x, int y);
但编译器全部吐出错误:
error C2065: 'TODOWN' : undeclared identifier
error C2065: 'TOUP' : undeclared identifier
error C2065: 'TOLEFT' : undeclared identifier
error C2065: 'TORIGHT' : undeclared identifier
你能告诉我我做错了吗?
答案 0 :(得分:4)
我在主
中声明了枚举
您需要在使用enum Direction
的所有翻译单元中包含的文件中声明enum
,而不仅仅是main
。例如,您可以在Direction.h
中定义它(不要忘记添加inclusion guards),然后将其包含在main
和转弯处理源文件中:
Direction.h
#ifndef Direction_H
#define Direction_H
enum Direction {TODOWN, TOUP, TORIGHT, TOLEFT};
#endif
现在使用#include "Direction.h"
将main
添加到您的enum
和其他文件中,以便正确编译您的资源。
答案 1 :(得分:4)
您需要在全局范围内(即任何函数之外)在任何函数之前声明枚举。否则它只会在您声明它的函数中可见。如果您的函数存在于不同的.c
文件中,则需要将枚举放入头文件中。