我正在尝试在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次。有人可以向我解释我在这里做错了吗?
答案 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