2013-05-14 39 views
2

嗨,我有一個函數如下。將enum變量傳遞給一個函數

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 

我宣佈主要爲枚舉:

enum Direction {TODOWN, TOUP, TORIGHT, TOLEFT}; 
static enum Direction heading; 
heading=TORIGHT; 

和我打電話從主此功能與

turnRight(heading, x, y); 

和高於一切,我添加原型:

void turnRight(enum Direction heading, int x, int y); 

但編譯器吐出低於erro rs全部結束:

error C2065: 'TODOWN' : undeclared identifier 
error C2065: 'TOUP' : undeclared identifier 
error C2065: 'TOLEFT' : undeclared identifier 
error C2065: 'TORIGHT' : undeclared identifier 

你能告訴我我在做什麼錯嗎?

+2

如果兩個函數都在同一個文件中,只需在兩個函數開始之前聲明您的枚舉,否則,請參閱答案。 –

+0

非常感謝您的回答 – Lyrk

回答

3

我在主

聲明枚舉您需要包含在使用該enum,不僅在main所有的翻譯單位文件中聲明enum Direction。例如,你可以在Direction.h定義它(不要忘記添加inclusion guards),然後將其包含在這兩個你main和轉處理的源文件:

Direction.h

#ifndef Direction_H 
#define Direction_H 

enum Direction {TODOWN, TOUP, TORIGHT, TOLEFT}; 

#endif 

現在使用enum#include "Direction.h"添加到main和其他文件中,以使源正確編譯。

+0

非常感謝您的回答 – Lyrk

4

您需要在全局範圍內(即,在任何函數之外)在任何函數之前聲明您的枚舉。否則,它只會在您聲明的函數中可見。如果您的函數存在於不同的.c文件中,則需要將該枚舉置於頭文件中。

+0

非常感謝。我把它放在外面,它現在正在工作。 – Lyrk