gpt4 book ai didi

compiler-errors - 如何使用 funset_avltree 库?

转载 作者:行者123 更新时间:2023-12-04 07:20:42 25 4
gpt4 key购买 nike

我正在尝试使用 funset_avltree库,但编译器生成无效的 C 代码。我正在使用 ATS/Postiats 版本 0.2.10。

我的代码相当简单:

(* ast.sats *)
staload "libats/SATS/funset_avltree.sats"

datatype ast =
| ast_var of string

fun free_vars (ast : ast) :<> set string
(* ast.dats *)
#include "share/atspre_staload.hats"
staload "./ast.sats"
staload "libats/SATS/funset_avltree.sats"
dynload "libats/DATS/funset_avltree.dats"

implement free_vars (ast : ast) : set string =
case+ ast of
| ast_var name => funset_sing name

然而,编译器的输出相当困惑:

ast_dats.c:359:51: 警告:函数“S2EVar”的隐式声明无效
在 C99 中 [-Wimplicit-function-declaration]
ATSINSmove(tmpret0, PMVtmpltcstmat[0](funset_sing )(tmp1));
^

ast_dats.c:359:39: 错误:使用未声明的标识符“funset_sing”
ATSINSmove(tmpret0, PMVtmpltcstmat[0](funset_sing )(tmp1));
^

ast_dats.c:359:64: 错误:预期的表达式
ATSINSmove(tmpret0, PMVtmpltcstmat[0](funset_sing )(tmp1));
^

我收到类似的错误 funsetfunset_listord .我一定错过了一些微不足道的东西。我是否需要包含某些内容或将某些标志传递给编译器?

最佳答案

根本原因是您没有静态加载库提供的 AVL 树模板。

在错误消息中,PMVtmpltcstmat通常表示模板有问题。通常情况是程序员忘记包含模板,或者忘记提供模板变量。你是第一种情况。

请添加这一行,

staload _ = "libats/DATS/funset_avltree.dats"

静态加载模板,并使它们可供编译器使用。请参阅此处的工作示例, https://glot.io/snippets/eiu6f3dd2r

此外, dynload当您有需要评估的“全局”值时需要。在你的情况下,你不需要 dynload avl 树库。此外,在您自己的文件中 ast.dats ,没有这样的全局值。你可以定义
#define ATS_DYNLOADFLAG 0

告诉编译器不要为 ast.dats 生成动态加载代码.

关于compiler-errors - 如何使用 funset_avltree 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39710462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com