2

こんにちは、以下の機能があります。

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 を main として次のように宣言しました。

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);

しかし、コンパイラはエラーの下に吐き出します:

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

私が間違っているところを教えてもらえますか?

4

2 に答える 2

4

メインで列挙型を宣言しました

だけでなく、enum Directionを使用するすべての翻訳単位に含まれるファイルで宣言する必要があります。たとえば、 で定義して( include guardsを追加することを忘れないでください)、それを自分のソース ファイルとターン処理ソース ファイルの両方に含めることができます。enummainDirection.hmain

方向.h

#ifndef Direction_H
#define Direction_H

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

#endif

ソースを正しくコンパイルするには、 を使用して自分のファイルやその他のファイルに追加#include "Direction.h"します。mainenum

于 2013-05-14T20:19:45.900 に答える
4

グローバルスコープ(つまり、関数の外)で、関数の前に列挙型を宣言する必要があります。それ以外の場合は、宣言した関数でのみ表示されます。関数が別の.cファイルにある場合は、列挙型をヘッダー ファイルに入れる必要があります。

于 2013-05-14T20:19:47.110 に答える