我在与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#include #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; } }
Chris Vig.. 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[])
.
您声明的原型与您的函数定义不匹配.你宣布:
void indexBooks(int, struct book science);
但是你要定义:
void indexBooks(int usrNum, struct book science[])
请注意定义中的括号.你的声明声明一个函数,它接受一个struct book
说法,但定义需要一个阵列的struct book
秒.您应该将声明更改为void indexBooks(int usrNum, struct book science[])
.