1

我正在尝试从 Choice.c 文件中调用方法“choice_1”和“choice_2”,使用 switch case 语句我想在 Menu.c 文件中进行输入后调用选项并返回结果,菜单是在循环和工作中,我知道这一点,因为我将方法从 Choice.c 文件移到 Menu.c 文件中,进行了一些调整,一切正常,但当它们位于单独的文件中时则不行......

我在两个文件的标题中都有“#includes Menu.h”。

我在头文件中也有 2 个函数:

void choice_1(int * count, char * text);
void choice_2(int * count, char * string);

当我尝试编译 Menu.c 我得到

[链接器错误] 未定义对“choice_1”的引用

[链接器错误] 未定义对“choice_2”的引用

菜单.c

int main(void){
int count[2];
...
while(TRUE) {
      printf("%s\n", "Menu:");
      printf("%s\n", "1) Option 1");
      printf("%s\n", "2) Option 2");
      ...
      printf("%s\n", "5) Exit");         
      fgets (userinput)...
...
      switch(userinput){
          case 1:
              choice_1(count);
              break;
          case 2:
              choice_2(count);
              break;
          ...
          case 5:
              return(EXIT_SUCCESS);
              break;
...

选择.c

....
void choice_1(int * count, char * text){
....
}
void choice_2(int * count, char * string){
....
}

它只是不调用这两种方法,我做错了什么?:S

4

3 回答 3

3

一旦您获得了在所有文件中匹配的函数的签名,您需要将choice.c 文件也“链接”到menu.c,因为它包含choice_1and的定义choice_2。否则,编译器找不到这两个函数的定义,因此会引发错误 -[Linker error] undefined reference to 'your_function_name'

于 2013-10-04T15:50:26.793 回答
3

当我尝试编译 Menu.c 我得到

    [Linker error] undefined reference to 'choice_1'

    [Linker error] undefined reference to 'choice_2'

这是因为您的函数定义在另一个文件中。您需要同时编译两者。这样您就可以摆脱链接器错误

如果你像这样编译你可以摆脱这个链接器错误

gcc menu.c choice.c -o out
./out
于 2013-10-04T16:02:22.333 回答
3

当您只将一个参数传递给choice_1and时,您的函数需要两个参数。 choice_2choice_1choice_2

switch(userinput){
      case 1:
          choice_1(count);  
          break;  //   ^ only one argument
      case 2:
          choice_2(count);
          break;  //   ^ only one argument  

也改变

return(EXIT_SUCCESS);  

return EXIT_SUCCESS;
于 2013-10-04T15:43:07.947 回答