使用另一个C文件中的switch case调用方法?

时间:2013-10-04 15:41:33

标签: c++ c

我正在尝试调用方法“choice_1”&来自Choice.c文件的“choice_2”,使用switch case语句我想在Menu.c文件中输入后调用选项并返回结果,菜单处于循环中并且有效,我知道这是因为我将Choice.c文件中的方法移动到Menu.c文件中,进行了一些调整,一切正常,但不是在单独的文件中...

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

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

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

当我尝试编译Menu.c时,我得到了

  

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

     

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

Menu.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;
...

Choice.c

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

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

3 个答案:

答案 0 :(得分:3)

当您只将一个参数传递给choice_1choice_2时,您的函数choice_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;

答案 1 :(得分:3)

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

答案 2 :(得分: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