Попытка передать функцию в качестве параметра другой функции в C ++, не получая ее?

0

пожалуйста, направляйте меня в следующих отношениях, я новичок в c++. Здесь я просто занимаюсь классом в c++. При написании примерной программы я просто попытался немного изменить ее и передать функцию в качестве параметра другой функции.

Но я думаю, что в должной мере я пропустил какую-то вещь.... пожалуйста, помогите мне... Спасибо всем #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;

}

  • 1
    Это очень трудно понять. Вы хотите передать функцию в WriteAns но WriteAns не принимает функцию в качестве аргумента. Если вы хотите передать результат функции, просто используйте WriteAns(RealNumber(j, k));
  • 0
    Вы можете передать функцию, но это немного сложнее. Смотрите: ideone.com/tvjPN7
Показать ещё 1 комментарий
Теги:

3 ответа

4

Это очень незначительная ошибка; вы не пытаетесь передать фактическую функцию в качестве параметра (как вы это сделали), но вы просто пытаетесь передать значение функции. change &RealNumber(j,k) в RealNumber(j,k) и он должен работать

0

Вы не можете использовать & на rvalue. Значение, возвращаемое RealNumber является временным и по расширению значением r, поэтому &RealNumber(a, b) является недопустимым. Как и ошибка, вам нужно lvalue. Попробуйте это вместо этого:

 void WriteAns(int* c)
 {
     cout<<"Added numbers are: "<<*c<<endl;
 }
 int c = RealNumber(j,k)
 WriteAns(&c);

Ссылка: Категории значений

rvalue (до С++ 11)/prvalue (начиная с С++ 11)

Значение prvalue ("чистое" rvalue) является выражением, которое идентифицирует временный объект (или его подобъект) или является значением, не связанным с каким-либо объектом.

Следующие выражения: prvalues:

  • Вызов функции/оператора, если функция или оператор возвращаемого типа не является ссылкой, например str.substr(1, 2) или 2 + 2
  • 0
    Почему передача c в качестве указателя?
  • 0
    @Chad Вот как комментируется код, я думаю.
Показать ещё 1 комментарий
0

Если вы пытаетесь передать функцию "Возвращаемое значение как параметр", тогда решение, данное Чадом, должно работать.

Если вы пытаетесь передать "функцию как параметр", как упомянуто выше (передать функцию как параметр другой функции.), Вам необходимо изменить подпись WriteAns для получения указателя функции.

void WriteAns(int  (*fp)(int,int))
{
  int i =  (*funcp)(10,20);
  cout<<"Added numbers are: "<<i<<endl;
}

WriteAns(&RealNumber(j,k));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню