我有一个函数sortbyName
,它返回一个递归数据结构sortedList
。 sortList
本身包含指向另一个递归数据结构stud_type
的指针,它们都定义如下。
typedef struct stud_type_ {
int matricnum;
char name[20];
struct stud_type_ *next_student;
} stud_type;
typedef struct sort_List {
stud_type *cur;
struct sortList *next;
} sortList;
stud_type listofStudents; // Assume that it is not NULL
sortList * sortbyName() {
sortList *sList;
//sort algorithm here
return sList;
}
...
...
int main() {
//trying to define curTEST = sortbyName() here
while (curTEST!=NULL) {
printf("Name: %s\n", curTEST->cur->name);
curTEST = curTEST->next;
}
}
现在我想在main()
函数中分配一个变量来保存sortbyName
函数的返回值,这样我就可以用while循环遍历它并打印出结果。我如何定义此变量?我尝试了sortList curTEST;
和sortList * curTEST;
无济于事。或者我对sortbyName
函数的定义是否有问题?
修改 我已经尝试编译它并纠正了大部分琐碎而不是那么微不足道的错误/警告,直到出现这个对我来说没有多大意义的当前错误报告。
u2_4.c:208:15: warning: implicit declaration of function 'sortbyName' is invalid in C99
[-Wimplicit-function-declaration]
curTEST = sortbyName();
^
u2_4.c:208:13: warning: incompatible integer to pointer conversion assigning to 'sortList *'
(aka 'struct sort_List *') from 'int' [-Wint-conversion]
curTEST = sortbyName();
^ ~~~~~~~~~~~~~~~~~~
2 warnings generated.
Undefined symbols for architecture x86_64:
"_sortbyName", referenced from:
_main in u2_4-Szd3la.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [u2_4] Error 1
在我的main
函数中,我定义了curTEST
,如下所示:sortList * curTEST;
答案 0 :(得分:1)
您是在另一个文件中定义函数...还是在定义main()之后?如果它在别处定义并且你在main()之前没有函数原型,那么你将得到警告和链接器错误。
我在一个文件(main.c)中完成了以下操作,并且编译没有任何问题。
typedef struct stud_type_ {
int matricnum;
char name[20];
struct stud_type_ *next_student;
} stud_type;
typedef struct sort_List {
stud_type *cur;
struct sort_List *next;
} sortList;
stud_type listofStudents; // Assume that it is not NULL
sortList * sortbyName() {
sortList *sList;
//sort algorithm here
return sList;
}
int main() {
sortList * curTEST = sortbyName();
while (curTEST!=NULL) {
printf("Name: %s\n", curTEST->cur->name);
curTEST = curTEST->next;
}
return 0;
}
请注意,我只对您的文件进行了两处更改。在定义指向next的指针时,我更改了sortList的结构。我将其从struct sortList *next
更改为struct sort_List *next
。我将curTEST定义并初始化为sortList * curTEST = sortbyName()
。