未定义的“函数”引用

时间:2013-05-13 11:25:15

标签: c reference undefined

所以我有这个非常简单的程序,但我似乎无法摆脱一个简单的错误。

我有一个带有此

的头文件
    #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;
    }  

我似乎无法弄清楚这个错误来自哪里。

2 个答案:

答案 0 :(得分:1)

您必须拥有类似于以下内容的文件:

/* FunctionLookUp.c */
#include "FunctionLookUp.h"

int lookUpFunction(enum functions)
{
  /* code ... */
  return x;
}

某处为了解决你的问题

答案 1 :(得分:0)

您永远不会显示实现该功能的代码。

所以你看到的最有可能是链接器错误,调用本身很好,但是链接器找不到要调用的代码,所以它会抛出错误。

只是声明一个函数不能神奇地让它出现在某个地方,你也必须编写实际函数。