试图将函数作为参数传递给C ++中的另一个函数,而不是它?

时间:2014-02-20 04:39:43

标签: c++

请指导我以下问候,我是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;

}

3 个答案:

答案 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);

参考:Value Categories

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));