将函数传递给C中的另一个函数.我做错了什么?

sde*_*sse 1 c

得到了一些我正在研究的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)

Tyl*_*nry 9

这些函数在代码中的任何位置都有实体吗?main函数之前的所有行都只是函数声明(aka prototypes).实际上你必须在某处创建和实现该功能.

函数声明是对编译器的一个承诺,即函数将在稍后的代码(或另一个目标文件)中存在,因此它不会抱怨.然后链接器看到你违背了你的承诺而感到不安.