HLA命名空间内全局结构体布尔字段初始化报错咨询
HLA命名空间初始化时布尔常量未定义问题解答
- 这是HLA编译器命名空间内初始化器的符号查找规则导致的,不属于编译器bug,是作用域查找细节没处理对。
- 核心原因:HLA处理命名空间内的变量初始化器时,只会优先查找当前命名空间内的符号,不会自动回溯全局作用域;但在
mov这类指令语句中,符号查找会默认包含全局作用域,所以你在mov里能直接用true,初始化器里不行。 - 解决方法:
- 初始化时显式指定全局作用域的布尔常量:
teacherwork: @global:works := [@global:true, 1000, 630.25, "hashem"]; - 在teacher命名空间内提前导入全局布尔常量:
namespace teacher; const true := @global:true; false := @global:false; var teacherwork: @global:works := [true, 1000, 630.25, "hashem"]; end teacher;
- 初始化时显式指定全局作用域的布尔常量:
- 补充验证:你去掉布尔字段后初始化正常,说明
@global:works的引用是没问题的,问题完全集中在布尔常量的作用域查找上——初始化器的符号查找规则和指令执行时的规则不一样。
内容的提问来源于stack exchange,提问作者ahs
相关产品推荐
相关产品推荐

