gpt4 book ai didi

c - 我的功能拒绝存在

转载 作者:行者123 更新时间:2023-11-30 14:26:16 25 4
gpt4 key购买 nike

每当我尝试运行测试文件时,都会收到此错误:

/tmp/ccCazDOe.o: In function `main':
/home/cs136/cs136Assignments/a06/testing.c:8: undefined reference to `icopy'
collect2: ld returned 1 exit status

该代码旨在用 C 语言实现列表结构。像 icon_destroy 和 irest_destroy 这样的函数意味着是破坏性函数。

当我尝试使用 ilength 函数时,也会发生同样的情况。

我尝试重写我的函数,重命名函数,在 header 中多次定义它们,制作一个新的测试文件。我似乎无法找出问题所在。当我决定创建一个名为 ilength 且仅返回数字的函数时,它似乎起作用了,所以我认为这可能是函数工作方式的问题。

这里有什么帮助吗?

我的测试文件的代码:

#include <stdio.h>
#include "ilist_destructive.h"

int main(void){
ilist x = iempty();
x = icons_destroy(1, x);
x = icons_destroy(2, x);
ilist y = icopy(x);
idelete(y);
idelete(x);
}

我的头文件:

// Destructive Abstract data type ilist

struct ilist_ADT;
typedef struct ilist_ADT *ilist;
ilist iempty();
int iempty_huh(ilist il);
int ifirst(ilist il);
ilist icons_destroy(int in, ilist il);
ilist irest_destroy(ilist il);
ilist icopy(ilist il);
int ilength(ilist il);
void idelete(ilist il);
int ilength(ilist il);
ilist icopy(ilist il);

我的.c 文件:

#include "ilist_destructive.h"
#include <stdlib.h>

// The ilist ADT is a pointer to this secret struct
struct ilist_ADT{
struct ilist_ADT *rest;
int first;
};

ilist icons_destroy(int in, ilist il){
if (il == NULL) {
ilist anewlist = malloc(sizeof(struct ilist_ADT));
anewlist->first = in;
anewlist->rest = NULL;
return (anewlist);
} else {
ilist previous = malloc(sizeof(struct ilist_ADT));
previous->first = il->first;
previous->rest = il->rest;
il->first = in;
il->rest = previous;
return il;
}
}

// ifirst returns the first element of il
int ifirst(ilist il){
if(il == NULL){
exit(1);
}
return il->first;
}

ilist irest(ilist il){
if(il == NULL){
exit(1);
}
return il->rest;
}

ilist irest_destroy(ilist il){
if(il == NULL){
exit(1);
}else if(il->rest == NULL){
free(il);
return NULL;
}else{
ilist original = il->rest;
il->first = original->first;
il->rest = original->rest;
free(original);
return il;
}
}

ilist iempty(){
return NULL;
}

// test for empty ilist
int iempty_huh(ilist il){
return il == NULL;
}

// free memory for entire ilist
void idelete(ilist il){
while (il != NULL) {
ilist next = il->rest;
free(il);
il = next;
}

int ilength(ilist il){
int counter = 0;
while (iempty_huh(il) != 1){
counter = counter + 1;
il = irest(il);
}
return counter;
}

ilist icopy(ilist il){
ilist copy = malloc(sizeof(struct ilist_ADT));
copy->first = il->first;
copy->rest = il->rest;
return copy;
}

}

最佳答案

看起来您可能只编译 testing.c,而不是 ilist_pressive.c。您需要使用如下命令来编译它们:

gcc -Wall testing.c ilist_destructive.c -o testing

(同时编译和链接它们)或者使用如下一系列命令:

gcc -Wall testing.c -c testing.o
gcc -Wall ilist_destructive.c -c ilist_destructive.o
gcc testing.o ilist_destructive.o -o testing

(它将它们每个编译成一个目标文件,然后将它们链接在一起;这更灵活一些,因为如果相关源文件没有更改,您可以放弃前两个步骤中的任何一个)。

关于c - 我的功能拒绝存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9370512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com