0

私はObjectiveCを学び始めたばかりで、typedef、列挙、switchステートメント、関数をいじって、それらに慣れるために遊んでいました。私の理解では、このコードはすべて機能するはずですが、「予期しない型名'dinnerPreference':期待される式。typedefを使用してdinnerPreferenceを定義した場合、なぜこれが発生するのか」というswitchステートメントを宣言するとコンパイルエラーが発生します。

typedef  enum { pizza = 0, steak = 1, seafood = 2} dinnerPreference;
int main(int argc, const char * argv[])
{

@autoreleasepool {


    dinnerPreference momDinnPref = pizza;
    dinnerPreference myDinnPref  = steak;
    dinnerPreference urDinnPref  = seafood;

    int dinnerPrefFunc ( dinnerPreference x ); {
        NSLog(@"Lets see what this guy wants for dinner");
        dinnerPreference x
        switch( dinnerPreference x ) {
            case pizza:
                NSLog(@"This person wants pizza");
                break;
            case steak:
                NSLog(@"This person wants steak");
                break;
            case seafood:
                NSLog(@"This person wants steak");
                break;
            default:
                NSLog(@"I dunno");
                break;
                return 0;
        };
    }
    dinnerPrefFunc(momDinnPref);
    dinnerPrefFunc(myDinnPref);
    dinnerPrefFunc(urDinnPref);
}
return 0;
4

2 に答える 2

2

Objective-C(およびC、C ++)は、少なくともあなたが試した方法では、他の関数内での関数の宣言をサポートしていません。次のようにコードを並べ替えてみてください。

typedef enum { pizza = 0, steak = 1, seafood = 2 } dinnerPreference;

int dinnerPrefFunc ( dinnerPreference x );
int dinnerPrefFunc ( dinnerPreference x )
{
    NSLog(@"Lets see what this guy wants for dinner");
    switch( x )
    {
        case pizza:
            NSLog(@"This person wants pizza");
            break;
        case steak:
            NSLog(@"This person wants steak");
            break;
        case seafood:
            NSLog(@"This person wants steak");
            break;
        default:
            NSLog(@"I dunno");
            break;
    }
    return 0;
}

int main(int argc, const char * argv[])
{

   @autoreleasepool
   {

      dinnerPreference momDinnPref = pizza;
      dinnerPreference myDinnPref  = steak;
      dinnerPreference urDinnPref  = seafood;

      dinnerPrefFunc(momDinnPref);
      dinnerPrefFunc(myDinnPref);
      dinnerPrefFunc(urDinnPref);
   }
   return 0;
}
于 2012-12-30T02:39:15.007 に答える
1

この行は間違っています:

switch( dinnerPreference x ) {

次のように変更します。

switch (x) {

また、xをまだ初期化していないことにも注意してください。

于 2012-12-29T23:48:27.927 に答える