c - 为什么我会收到 "undefined reference to"错误?

标签 c

下面的代码抛出一个错误“undefined reference to 'poredi'”。

一切都在这个单独的 c 文件中定义(除了 include 中的 c 库)。

'poredi' 只是一个函数,我在 typedef 的正下方定义了一个原型(prototype),然后在文件的较低位置实现了它。

查看一些类似的问题,我可以说它是通过 CodeBlocks IDE 使用 MinGW C 编译器在 Windows 10 上编译的,没有任何额外的编译参数。

我是一个彻头彻尾的 C 菜鸟,所以非常感谢您的帮助。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    char ime[20];
    char prezime[20];
    char registracija[10];
    int dRod;
    int mRod;
    int gRod;
    char datumIzdavanja[10];
} vozac;

void poredi(vozac *vozaci, int linije);
int nlines(char *datoteka);
void napuni(FILE *ulaz, vozac *vozaci, int lines);

int main(){
    int lines = nlines("Registar.in");
    FILE *ulaz = fopen("Registar.in", "r");
    int i;
    FILE *izlaz = fopen("Najmladji.out", "w");
    vozac *vozaci = calloc(lines,sizeof(vozac));
    napuni(ulaz,vozaci,lines);
    fclose(ulaz);
    poredi(vozaci,lines);
    for (i = 0; i < 5; i++){
        printf("\n%s %s (%d.%d.%d)", vozaci[i].ime, vozaci[i].prezime, vozaci[i].dRod, vozaci[i].mRod, vozaci[i].gRod);
    }
    fclose(izlaz);
    return 0;
}
int nlines(char *datoteka){
    FILE *ulaz = fopen("Registar.in", "r");
    int brojac = 0;
    while (!feof(ulaz)){
        char ch = fgetc(ulaz);
        if (ch == '\n') brojac++;
    }
    fclose(ulaz);
    return brojac;
}
void napuni(FILE *ulaz, vozac *vozaci, int lines){
    int i;
    char *linija = calloc(70, sizeof(char));
    char *token;
    char *token2;
    char *znak;
    char *znak2;
    for (i= 0; i < lines; i++){
        fgets(linija,70,ulaz);
        token = strtok(linija," ");
        strcpy(vozaci[i].prezime, token);
        znak = strchr(vozaci[i].prezime,',');
        *znak = 0;
        token = strtok(NULL," ");
        strcpy(vozaci[i].ime, token);
        znak2 = strchr(vozaci[i].ime, ';');
        *znak2 = 0;
        token = strtok(NULL, " ");
        strcpy(vozaci[i].registracija, token);
        token = strtok(NULL, " ");
        token2 = strtok(token, ".");
        vozaci[i].dRod = atoi(token2);
        token2 = strtok(NULL, ".");
        vozaci[i].mRod = atoi(token2);
        token2 = strtok(NULL, ".");
        vozaci[i].gRod = atoi(token2);
        token = strtok(NULL, " ");
        strcpy(vozaci[i].datumIzdavanja, token);
    }
void poredi(vozac *vozaci, int linije){
    int sortirano = 1;
    vozac buffer;
    while (sortirano){
        sortirano = 0;
        for (i = 0; i < linije; i++){
            if (vozaci[i].gRod > vozaci[i+1].gRod){
                buffer = vozaci[i];
                vozaci[i] = vozaci[i+1];
                vozaci[i + 1] = buffer;
                sortirano = 1;
            }
            else if (vozaci[i].gRod == vozaci[i + 1].gRod){
                if (vozaci[i].mRod > vozaci[i + 1].mRod){
                    buffer = vozaci[i];
                    vozaci[i] = vozaci[i+1];
                    vozaci[i + 1] = buffer;
                    sortirano = 1;
                }
                else if (vozaci[i].mRod == vozaci[i + 1].mRod){
                    if (vozaci[i].dRod > vozaci[i + 1].dRod){
                        buffer = vozaci[i];
                        vozaci[i] = vozaci[i+1];
                        vozaci[i + 1] = buffer;
                        sortirano = 1;
                    }
                }
            }
        }
    }
}
}

最佳答案

您在 napuni() 中定义了 poredi()。嵌套函数在 ISO C 中无效,但 gcc 允许它作为 extension .我怀疑您是否真的打算使用嵌套函数,但错放了大括号。从源文件末尾删除一个大括号 },将其添加到 poredi() 的定义之上

更好的缩进有助于避免此类意外。

关于c - 为什么我会收到 "undefined reference to"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34634259/

相关文章:

c - strcpy() 返回值

c - 在 C 语言中,每次使用 scanf 清除缓冲区时,我都应该使用 FLUSH 吗?

c - 简单链表实现 C 中的奇怪内存问题

c - 使用 write() 在 C 中写入文件时出现随机符号

c - 至未签名并返回 : Casting Pointer vs Casting Dereference

c++ - 尝试在单击按钮时从编辑框中捕获文本,然后显示到另一个编辑框

c - 在 C 中访问从 Lua 传递的表,而不复制值

c - 具有可变参数函数的 char 之前的预期表达式

c++ - 编译错误。如何使用 lex/yacc 解析变量名?

android - 在Android NDK上编译并运行动态创建C程序