请指导我以下问候,我是c ++的新手。在这里,我只是在C ++中练习Class。在编写示例程序时,我只是尝试改变它并将函数作为参数传递给另一个函数。
但我认为在正当程序中我缺少一些东西......请指导我......谢谢大家 #include
using namespace std;
class my_class{
int i;
int j;
public:
int RealNumber(int a, int b);
void WriteAns(int c);
};
int RealNumber(int a, int b)
{
return a+b;
}
void WriteAns(int c)
{
int i = c;
cout<<"Added numbers are: "<<i<<endl;
}
int main()
{
int j =10, k=20;
int m = 0;
m = RealNumber(j,k);
/*I have tried to pass the function RealNumber in place of m,
while declaring the function as follow:
WriteAns(int *c);
and then i have tried to pass function RealNumber as a parameter
WriteAns(&RealNumber(j,k));
*/
WriteAns(m); //By passing m i get the correct ans
return 0;
}
答案 0 :(得分:4)
这是一个非常小的错误;你不是试图将实际函数作为参数传递(正如你已实现的那样),但你只是试图传递函数的最大值。
将&RealNumber(j,k)
更改为RealNumber(j,k)
,它应该可以正常工作
答案 1 :(得分:0)
您不能在右值上使用&
。 RealNumber
返回的值是临时值,扩展名为rvalue,因此&RealNumber(a, b)
无效。就像错误说的那样,你需要一个左值。试试这个:
void WriteAns(int* c)
{
cout<<"Added numbers are: "<<*c<<endl;
}
int c = RealNumber(j,k)
WriteAns(&c);
rvalue(直到C ++ 11)/ prvalue(从C ++ 11开始)
prvalue(“纯”rvalue)是一个标识临时值的表达式 对象(或其子对象)或者是与any无关的值 对象
以下表达式是prvalues:
- 函数调用/运算符表达式,如果函数或运算符的返回类型不是引用,例如str.substr(1,2) 或2 + 2
答案 2 :(得分:0)
如果您尝试将“函数返回值作为参数”传递,则Chad给出的解决方案应该有效。
如果您尝试传递“如上所述的参数函数”(将函数作为参数传递给另一个函数。),则需要更改WriteAns的签名以接收函数指针。
void WriteAns(int (*fp)(int,int))
{
int i = (*funcp)(10,20);
cout<<"Added numbers are: "<<i<<endl;
}
WriteAns(&RealNumber(j,k));