得到了一些我正在研究的C代码,它看起来应该可行.当我尝试链接目标文件时,我在main中的getLine函数中得到一个错误,说"对outputBus的未定义引用"等等.我在功能名称之前使用和不使用&符号尝试过它.用...编译gcc -ansi.我究竟做错了什么?
typedef void(*DualOutput)(const int, const int);
typedef void(*TripleOutput)(const int, const int, const double);
void passenger(node**, node**, itemtype*);
double bus(node**, node**, itemtype*);
int getLine(itemtype*, DualOutput, DualOutput);
void getLines(node**, node**, DualOutput, DualOutput, TripleOutput);
void outputBus(const int, const int);
void outputPeople(const int, const int);
void outputTotal(const int, const int, const double);
int main(int argc, char **argv){
node *head = NULL;
node *tail = NULL;
getLines(&head, &tail, outputBus, outputPeople, outputTotal);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这些函数在代码中的任何位置都有实体吗?main函数之前的所有行都只是函数声明(aka prototypes).实际上你必须在某处创建和实现该功能.
函数声明是对编译器的一个承诺,即函数将在稍后的代码(或另一个目标文件)中存在,因此它不会抱怨.然后链接器看到你违背了你的承诺而感到不安.