我正在使用以下scala代码尝试使用虚拟方法表(动态调度)将此代码转换为C.
这是scala中的代码:
abstract class Node(n: String) {
val id = Node.next
var name: String = n
def size: Int
def nrNodes: Int = 1
def find(q: String): Set[Node] =
if(name.contains(q)) Set(this) else Set()
}
我的问题在于这部分代码:
def find(q: String): Set[Node] =
if(name.contains(q)) Set(this) else Set()
我正在尝试将其翻译成C,这是我到目前为止所做的:
Set find(Node *n, char * s){
if(strstr(s,n->name)!=0){
return (Set) n->name;
}
return ((Set (*)(Node *)) n->vtable[FIND])(n);
}
因此,如果包含节点,则返回一组节点,否则返回空集。当我运行它时,它会出现以下错误:
error: unknown type name 'Set'
use of undeclared identifier 'Set'
我不确定是否必须使用struct Set或者我的find方法一般都是错误的!
这是我的视力表:
enum Node_vtablekeys{
SIZE=0,
NRNODERS=1,
FIND=2
};
答案 0 :(得分:1)
如评论中所述,您似乎忘记了申报结构:
typedef struct _set
{
// Whatever Set must contains
} Set;
此外,我真的不知道Scala,但在find()
看起来如果找不到匹配,该函数实际上会创建一个新的Set
,所以我想应该有一个{ {1}}在您的函数中。
你能告诉我们scala Set结构吗?
根据您使用malloc
的方式,返回引用而不是find()
结构本身可能更有用。
Set