【问题标题】:Enum initializer as const枚举初始值设定项为 const
【发布时间】:2018-04-03 16:46:36
【问题描述】:

vala 枚举不是基于整数的吗?此示例生成“c”编译错误。没什么大不了的,但想了解原因。

const int INT_UNINITIALIZED = 999;
public enum ScopeTypes {
    /*OSS:Fix:GLib requires a default value, set GLOBALS = 0
     (VSCodeDbgSvr.exe:31979): GLib-GObject-CRITICAL **: g_param_spec_enum: assertion 'g_enum_get_value (enum_class, default_value) != NULL' failed*/
    NONE = INT_UNINITIALIZED,
    GLOBALS = 0,
    ARGUMENTS,
    LOCALS,
    EXCEPTIONS,
    TOT_SCOPE_TYPES;
    //Vala enums may have methods:
    public bool is_global() {
        return (this == GLOBALS || this == EXCEPTIONS);
        }
    public bool is_function() {
        return (this == ARGUMENTS || this == LOCALS);
        }
    public bool is_valid() {
        return (this != NONE);
        }
    }

编译输出:

    > Executing task: /opt/vala/bin/valac helloworld.vala class1.vala --pkg libvala-0.40 -X -I/opt/vala/include/vala-0.40 -X -O0 --vapidir=/opt/vala/share/vala/vapi --debug --save-temps -o helloworld.exe <

   /media/george/SharedData/Projects/Vala/Examples/playground-2/helloworld.c:82:21: error: ‘INT_UNINITIALIZED’ undeclared here (not in a function)
      SCOPE_TYPES_NONE = INT_UNINITIALIZED,
                         ^~~~~~~~~~~~~~~~~
    error: cc exited with status 256
    Compilation failed: 1 error(s), 1 warning(s)
    The terminal process terminated with exit code: 1

【问题讨论】:

    标签: vala


    【解决方案1】:

    错误信息的相关部分是:

    error: ‘INT_UNINITIALIZED’ undeclared here (not in a function)
    

    C 编译器抱怨它找不到常量的声明。所以这根本不是类型问题。

    这是一个范围/排序问题。

    如果你用valac -C 编译代码,你会得到一个看起来像这样的.c 文件:

    typedef enum  {
            SCOPE_TYPES_NONE = INT_UNINITIALIZED,
            SCOPE_TYPES_GLOBALS = 0,
            SCOPE_TYPES_ARGUMENTS,
            SCOPE_TYPES_LOCALS,
            SCOPE_TYPES_EXCEPTIONS,
            SCOPE_TYPES_TOT_SCOPE_TYPES
    } ScopeTypes;
    
    
    
    #define INT_UNINITIALIZED 999
    

    请注意 Vala 编译器如何重新排序代码以先声明枚举,然后再声明常量。

    由于在 C 中文件中的声明顺序很重要,因此无法编译。

    我认为这是一个编译器错误,您可能希望将此报告给GNOME bugtracker(产品 Vala)。

    【讨论】:

    • “(不在函数中)”错误让我很困惑,感谢您的解释
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    相关资源
    最近更新 更多