0

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

我有一个头文件

    #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的定义

现在,当我从包含头文件的主文件中调用 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;
    }  

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

4

2 回答 2

1

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

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

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

为了解决你的问题

于 2013-05-13T11:34:59.937 回答
0

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

因此,您看到的很可能是链接器错误,调用本身很好,但链接器找不到要调用的代码,因此会引发错误。

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

于 2013-05-13T11:31:34.497 回答