C 在单独的文件中调用函数
我试图调用另一个c文件中的函数,但是,该函数属于在链表中创建的数据类型,类型定义称为“treat”。我的代码如下:C 在单独的文件中调用函数,c,C,我试图调用另一个c文件中的函数,但是,该函数属于在链表中创建的数据类型,类型定义称为“treat”。我的代码如下: typedef struct micro{ int id; char user[51]; char text[141]; struct micro *next; }treat; treat * createMicro(treat * treatList); int ma
typedef struct micro{
int id;
char user[51];
char text[141];
struct micro *next;
}treat;
treat * createMicro(treat * treatList);
int main(int argc, char *argv[]) {
int menu_op;
if(argc <= 1) {
printf("Please enter a number argument between 1 and 8.");
exit(0);
}
else if(argc > 2) {
printf("Too many arguments.");
exit(0);
}
menu_op = atoi(argv[1]);
if(menu_op == 1) {
createMicro(treat *treatList); //Where the error is coming from
}
}
将文件扩展名从“.c”重命名为“.h”,并将其包括在内:
#include "createMicro.h"
显然,您已经在调用该函数,错误显然与参数列表中的语法错误有关。您编写了一个声明而不是给出一个参数,很可能您只是复制了函数的原型 更改此项:
createMicro(治疗*治疗列表);
…如果您的函数允许NULL
:
createMicro(空);
…或者,如果您想提供预填充的处理
:
treat myTreatList={
23,/*id*/
“me用户”、/*用户*/
“一些文本”、/*文本*/
NULL/*下一个*/
};
createMicro(&myTreatList);
顺便说一句,您需要将调用结果存储在某处…我需要修复的错误是参数。而不是:
createMicro(treat *treatList);
应该是:
createMicro(treatList);
在调用“creatMicro”之前将变量“treatList”声明并初始化为零那么,为什么要调用
printf
像printf(“参数太多”)代码>而不是printf((const char*)“参数太多”)代码>?类似地,退出(0)
:为什么不退出(int 0)
?为什么不atoi(char*argv[1])
?if(menu_op==1){treat treatList={0};createMicro(&treatList);}
。。。但是,当然,变量定义应该有足够的范围满足您的需求(如果的范围太窄,就在中)。看看您是如何调用printf
、exit
和atoi
,然后看看您是如何调用createMicro
。注意到一个不同吗?您没有包含标题。您应该使用结构和函数定义编写一个头文件createMicro.h
,并使用的main();退出(退出失败)代码>请删除该建议。包含文件应仅包含声明,而不包含定义(代码)。不注意这是一种反模式和违反一个定义规则的方法。@SergeBallesta C没有模板。@SerceBallesta声明也是代码。我知道这一点。但我试着使用共同语言。不管怎样,把一个定义放在一个文件中,包括一个反模式。@ SergBaleLista虽然C和C++可能是密切相关的,但它们应该是完全不同的,即使它们有一些“公共”部分。因为 >处理列表< /C>是指向链表的指针,声明它如下:<代码> Teal*TealStale= null;代码>则不在实际调用语句的调用参数中包含变量类型
createMicro(treatList);