C++ C++;:按值传递变量

C++ C++;:按值传递变量,c++,C++,情况就是这样: int f(int a){ ... g(a); ... } void g(int a){...} 问题是编译器说没有匹配的函数来调用g(int&)。它希望我通过引用传递变量,而g()通过值接收参数 我该如何解决这个问题呢?好吧,这里没有太多,但首先要做的是:确保在定义f之前包含了g的声明 void g(int a); 否则,当你到达f时,函数f不知道函数g是什么样子,你会遇到麻烦。从你给出的到目前为止,这是我能说的最好的了。你的函数g()需要在上面定

情况就是这样:

int f(int a){
    ...
    g(a);
    ...
}

void g(int a){...}
问题是编译器说没有匹配的函数来调用g(int&)。它希望我通过引用传递变量,而g()通过值接收参数


我该如何解决这个问题呢?

好吧,这里没有太多,但首先要做的是:确保在定义f之前包含了g的声明

void g(int a);

否则,当你到达f时,函数f不知道函数g是什么样子,你会遇到麻烦。从你给出的到目前为止,这是我能说的最好的了。

你的函数
g()
需要在上面定义
f()
有两件事不对:

1) g在使用之前没有声明,因此编译器将对此进行编译。假设您解决了该问题,那么下一个问题是:


2) f没有返回整数。

如果您切换
f
g
四舍五入的定义会发生什么?您确定这是正确的代码吗?函数f返回一个int,但没有返回语句。您能发布编译器错误吗?可能您的函数f()不知道函数g()存在。您是否忘记转发声明g()?或者像多米尼克建议的那样切换f()和g()。调用中的
int&
并不意味着需要通过引用传递
a
。它只是显示您传递的参数,它们是
g(左值int)
。因为它不能用类型来表示左值,所以它显示的是
g(int&)
。是的,它是。如果我将g()声明为:g(int&a);它可以工作,但这不是我想做的。@macaco:我想你需要再发布一些代码。您发布的内容不会引发任何错误。您的意思是声明的。编译器寻找函数的存在,然后链接到实际的实现(定义)。是的,这也可以,但是如果是简单的函数,最好在上面定义它