所以我有这个非常简单的程序,但我似乎无法摆脱一个简单的错误。
我有一个带有此
的头文件 #ifndef FUNCTIONLOOKUP_H_INCLUDED
#define FUNCTIONLOOKUP_H_INCLUDED
enum functions
{
foo,
bar
};
//predefined function list
int lookUpFunction(enum functions);
#endif // FUNCTIONLOOKUP_H_INCLUDED
在src文件中我有lookUpFunction的定义
现在当我从我的main中调用lookUpFunction()时,我在其中包含了头文件,它给了我一个未定义的引用。其他问题无处可寻。
#include <stdio.h>
#include <stdlib.h>
#include "FunctionLookUp.h"
int main()
{
lookUpFunction(foo); <---
return 0;
}
功能实现
#include <stdio.h>
#include "FunctionLookUp.h"
typedef void (*FunctionCallback)(int);
FunctionCallback functionList[] = {&foo, &bar};
void foo(int i)
{
printf("foo: %d", i);
}
void bar(int i)
{
printf("bar: %d", i);
}
int lookUpFunction(enum functions)
{
int test = 2;
//check if function ID is valid
if( functions >= sizeof(functionList))
{
printf("Invalid function id"); // error handling
return 0;
}
//call function
functionList[functions](test);
return 1;
}
我似乎无法弄清楚这个错误来自哪里。
答案 0 :(得分:1)
您必须拥有类似于以下内容的文件:
/* FunctionLookUp.c */
#include "FunctionLookUp.h"
int lookUpFunction(enum functions)
{
/* code ... */
return x;
}
某处为了解决你的问题
答案 1 :(得分:0)
您永远不会显示实现该功能的代码。
所以你看到的最有可能是链接器错误,调用本身很好,但是链接器找不到要调用的代码,所以它会抛出错误。
只是声明一个函数不能神奇地让它出现在某个地方,你也必须编写实际函数。