Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从另一个C文件中使用switch case调用方法?_C++_C - Fatal编程技术网

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

C++ 从另一个C文件中使用switch case调用方法?,c++,c,C++,C,我试图从choice.c文件中调用方法“choice_1”和“choice_2”,使用switch case语句,我想在Menu.c文件中获取输入并返回结果后调用选项,菜单处于循环中并工作,我知道这一点,因为我将方法从choice.c文件移到Menu.c文件中,一些调整和一切工作,但不是当他们在单独的文件 我在两个文件的标题中都有“#includes Menu.h” 头文件中还有两个函数: void choice_1(int * count, char * text); void choice_

我试图从choice.c文件中调用方法“choice_1”和“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时,我得到

    [Linker error] undefined reference to 'choice_1'

    [Linker error] undefined reference to 'choice_2'
[Linker error]未定义对“choice_1”的引用

[Linker error]未定义对“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){
....
}

它只是不调用这两种方法,我做错了什么当您只将一个参数传递给
choice\u 1
choice\u 2
时,您的函数
choice\u 1
choice\u 2
需要两个参数

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

return(EXIT_SUCCESS);  


当您只将一个参数传递给
choice\u 1
choice\u 2
时,您的函数
choice\u 1
choice\u 2
需要两个参数

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

return(EXIT_SUCCESS);  


一旦您获得与所有文件中的函数匹配的签名,您也需要将choice.c文件“链接”到menu.c,因为它包含
choice\u 1
choice\u 2
的定义。否则,编译器找不到这两个函数的定义,因此在获得所有文件中匹配的函数签名后,会抛出错误-
[Linker error]未定义的引用到“your\u function\u name”

,您还需要将choice.c文件“链接”到menu.c,因为它包含
choice_1
choice_2
的定义。否则,编译器找不到这两个函数的定义,因此在我尝试编译Menu.c时抛出错误-
[Linker error]未定义引用到“your\u function\u name”

    [Linker error] undefined reference to 'choice_1'

    [Linker error] undefined reference to 'choice_2'
这是因为函数定义位于另一个文件中。您需要一次编译这两个文件,这样就可以消除链接器错误

如果您这样编译,就可以消除这个链接器错误

gcc menu.c choice.c -o out
./out

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

    [Linker error] undefined reference to 'choice_1'

    [Linker error] undefined reference to 'choice_2'
这是因为函数定义位于另一个文件中。您需要一次编译这两个文件,这样就可以消除链接器错误

如果您这样编译,就可以消除这个链接器错误

gcc menu.c choice.c -o out
./out


在命令行中键入什么来进行编译?
return
不是一个函数。使用
返回退出\u成功@mbrach您是对的我的命令行编译缺少一些细节。:)你能给我看一些实际的代码吗<例如,code>fgets
接受三个参数,而不是一个参数,
userinput
的类型是什么?(我看不出在哪里可以将输入从字符转换成某种类型的整数。)您在命令行中键入什么来进行编译?
return
不是一个函数。使用
返回退出\u成功@mbrach您是对的我的命令行编译缺少一些细节。:)你能给我看一些实际的代码吗<例如,code>fgets
接受三个参数,而不是一个参数,
userinput
的类型是什么?(我看不出你在哪里把输入从字符转换成某种类型的整数。)是的,但当我传递2个参数时,我得到了“函数参数太多”的结果。请向你展示函数。我想看看你的函数定义。请不要混淆,谢谢你的帮助更改
返回(退出\成功)返回
退出成功不是完全必要的。虽然我也更喜欢后者,但我见过使用括号的样式模式。是的,但当我传递2个参数时,我得到“函数参数太多”请向您显示函数。我想查看您的函数定义。请不要混淆,谢谢您的帮助更改
返回(退出\成功)返回
退出成功不是完全必要的。虽然我也更喜欢后者,但我见过使用括号的样式模式。请问如何将两者联系起来?我假设签名是指所有文件中的代码都应该匹配?请问如何将两者链接?我假设签名是指代码应该在所有文件中都匹配?哦,好吧,这就是我需要尝试的,我会尝试一下!谢谢工作得很有魅力!谢谢大家!:)信任错误消息。当他们说链接器错误时,你就知道这是目标代码链接的问题。@DavidRTribble是的,你绝对正确。查看错误将解决最大问题。哦,好吧,这就是我需要尝试的,我会尝试一下!谢谢工作得很有魅力!谢谢大家!:)信任错误消息。当他们说链接器错误时,你就知道这是目标代码链接的问题。@DavidRTribble是的,你绝对正确。查看错误可以解决最大问题。