我在与C练习期间遇到了一个问题,希望堆栈溢出的人可以帮助我。后面的故事是我想要深入了解如何使用结构,所以我开始使用这个概念,但是当我开始使用数组并开始将结构传递给函数时遇到了问题。
当我在Linux中使用G ++编译代码时,出现编译错误:
/tmp/ccCjoSgv.o: In function `main':
main.c:(.text+0x10e): undefined reference to `indexBooks(int, book)'
collect2: error: ld returned 1 exit status
我花了几个小时试图通过类似的Stack Overflow问题来解决这个问题,但仍然无法理解为什么我会收到此编译错误。任何人都可以提供他们的专业知识并解释我为什么会收到这些错误吗?
book.h
struct book{
char title[100];
char author[100];
unsigned int bin;
};
主要包括
#include <stdio.h>
#include <stdlib.h>
#include "books.h"
主要原型
void askUsrNum(int*);
void indexBooks(int, struct book science);
在main()
内int usrNum;
struct book science[usrNum];
... plus the code below...
主要功能调用
askUsrNum(&usrNum); //ask user how many books to catalog
indexBooks(usrNum, *science); //record the books using struct
实际功能
void askUsrNum(int *usrNum){
printf("How many books are you cataloging: ");
scanf("%i", usrNum);
return;
}
void indexBooks(int usrNum, struct book science[]){
int i = 0;
int limit = (usrNum -1);
for(i = 0; i <= limit; i++){
printf("Book %i Title: ", i+1);
scanf("%s", science[i].title);
printf("Book %i Author: ", i+1);
scanf("%s", science[i].author);
printf("Book %i BIN: ", i+1);
scanf("%i", &science[i].bin);
printf("\n"); //newline
return;
}
}
答案 0 :(得分:5)
您声明的原型与您的函数定义不匹配。你宣布:
void indexBooks(int, struct book science);
但你定义:
void indexBooks(int usrNum, struct book science[])
请注意定义中的括号。您的声明声明了一个函数,它接受一个struct book
参数,但该定义采用struct book
的数组。您应该将声明更改为void indexBooks(int usrNum, struct book science[])
。
答案 1 :(得分:4)
您的函数原型和实现不匹配:
原型:
void indexBooks(int, struct book science); // science should be an array instead
实现:
void indexBooks(int usrNum, struct book science[])
看起来你的原型是错的,indexBooks()
正在使用一个struct数组而不是单个struct。
您应该首先尝试修复原型:
void indexBooks(int, struct book science[]);
同样在main
中,您应该传递整个数组而不是第一个元素:
indexBooks(usrNum, *science); //record the books using struct // incorrect
应该是
indexBooks(usrNum, science);
答案 2 :(得分:4)
原型和功能不匹配:
void indexBooks(int usrNum, struct book science);
void indexBooks(int usrNum, struct book science[]){
一个是数组,一个是结构....