将枚举变量传递给函数

时间:2013-05-14 20:15:49

标签: c enums

嗨,我有以下功能。

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
你能告诉我我做错了吗?

2 个答案:

答案 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文件中,则需要将枚举放入头文件中。