пожалуйста, направляйте меня в следующих отношениях, я новичок в 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;
}
Это очень незначительная ошибка; вы не пытаетесь передать фактическую функцию в качестве параметра (как вы это сделали), но вы просто пытаетесь передать значение функции. change &RealNumber(j,k)
в RealNumber(j,k)
и он должен работать
Вы не можете использовать &
на 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
c
в качестве указателя?
Если вы пытаетесь передать функцию "Возвращаемое значение как параметр", тогда решение, данное Чадом, должно работать.
Если вы пытаетесь передать "функцию как параметр", как упомянуто выше (передать функцию как параметр другой функции.), Вам необходимо изменить подпись WriteAns для получения указателя функции.
void WriteAns(int (*fp)(int,int))
{
int i = (*funcp)(10,20);
cout<<"Added numbers are: "<<i<<endl;
}
WriteAns(&RealNumber(j,k));
WriteAns
ноWriteAns
не принимает функцию в качестве аргумента. Если вы хотите передать результат функции, просто используйтеWriteAns(RealNumber(j, k));