【问题标题】:Compiler won't recognize typedef in switch statement编译器无法识别 switch 语句中的 typedef
【发布时间】:2012-12-14 17:59:20
【问题描述】:

我刚开始学习objective c,我在玩typedef、枚举、switch语句和函数,只是为了更熟悉它们。根据我的理解,这段代码应该都可以工作,但是我在声明 switch 语句的位置出现编译错误,上面写着“意外的类型名称'dinnerPreference':预期的表达式。如果我使用 typedef 来定义dinnerPreference,那么为什么会发生这种情况。

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;

【问题讨论】:

    标签: objective-c xcode xcode4


    【解决方案1】:

    这一行是错误的:

    switch( dinnerPreference x ) {
    

    改成:

    switch (x) {
    

    还要注意,你还没有初始化 x。

    【解决方案2】:

    Objective-C(和 C、C++)不支持在 within 其他函数中声明函数,至少不支持您尝试过的方式。尝试按如下方式重新排序您的代码:

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

    【讨论】:

      猜你喜欢
      • 2019-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多