来自scala的c中的动态调度

时间:2014-02-27 12:43:44

标签: c scala dispatch

我正在尝试在C中实现动态调度,从scala进行翻译。作为我在C代码中的一部分,我有

typedef struct File{
  void (**vtable)();
  char *node;
  int *size;
}File;

//function
Node  *newFile(char *n, int *s);

int *newFile_Size(Node* n){
  return (int *)n->size;
}

void (*Folder_Vtable[])() = {(VF) &newFile_Size};

Node  *newFile(char *n, int *s){
  File *temp = NEW(File);
  temp->vtable= Folder_Vtable;
  temp->node=n;
  temp->size=s;
  return (Node *) temp;
}

这是scala中以下代码的翻译:

class File(n: String, s: Int) extends Node(n) {
  var size: Int = s
}

当我编译我的C代码时,我收到此错误:

./solution.c:123:30: note: passing argument to parameter 's' here
Node  *newFile(char *n, int *s){

这是函数的调用方式:

Node* file = newFile("file_to_test", 1);

我得到这个警告/错误5次。有人可以向我解释我在这里做错了吗?

1 个答案:

答案 0 :(得分:1)

好的,这就是问题所在:

在你的主要:

Node* file1 = newFile("file_to_test", 1);

newFile()期待对整数的引用,但是你直接传递一个整数。

你应该尝试类似的东西:

int size = 1;
Node* file1 = newFile("file_to_test", &size);

或(如果您不想修改主要内容):

typedef struct File{
  void (**vtable)();
  char *node;
  int size;
}File;
//function
Node  *newFile(char *n, int s);
// Update other functions