我想调用一个带有多个参数的函数作为另一个函数的参数。该赋值要求传递计数值(恰好恰好与从整数类型read_Events函数返回的值相同)作为另一个函数的参数。尽管我可以只调用函数并将其存储并传递,但我认为将整个函数作为参数传递可能会更干净一些。
这是针对我为学习目的而修订的上一课程的项目。到目前为止,我已经尝试将函数2的地址存储到一个指针中,并将存储函数2的地址的指针作为函数1的参数传递给我。我还试图将函数2的整个参数传递给函数1的参数。
#include<iostream>
#include<conio.h>
#include<string>
using namespace std;
struct Date {
int month;
int day;
int year;
};
struct Time {
int hour;
int minute;
};
struct Event {
char desc[80];
Date date;
Time time;
};
int read_Events(Event* Eptr[50], int MAX);
void display(Event* Eptr[50],int(*read_events)(Event , int )) //1. can i
do this?;
int main() {
Event* Eptr[50];
int *Fptr = &read_Events;//#2 Is this possible? (function address
to pass as arugement in display function)
_getch();
return 0;
}
int read_Events(Event* Eptr[50], int MAX) {
bool repeat = true;
char ans;
char slash;
char colon;
int i = 0;
while (repeat && i < MAX) {
cout << "\nWould you like to add a new event [y/n]? ";
cin >> ans;
if (ans == 'Y' || 'y') {
Eptr[i] = new Event;
repeat = true;
cout << "\nEnter description: ";
cin.clear();
cin.ignore(256, '\n');
cin.getline(Eptr[i]->desc, sizeof(Eptr[i]->desc));
cout << "\nEnter Date(MM/DD/YYYY): ";
cin >> Eptr[i]->date.month >> slash >> Eptr[i]->date.day >>
slash >> Eptr[i]->date.year;
cout << "\nEnter time(HH:MM): ";
cin >> Eptr[i]->time.hour >> colon >> Eptr[i]->time.minute;
}
else {
repeat = false;
return i;
}
i++;
}
return i; //returning number of events
}
It seems as if what I have done so far is not syntactically correct.
答案 0 :(得分:0)
void display(Event* Eptr[50],int(*read_events)(Event , int )) //1. can i do this?;
是的,可以。确保声明正确终止。
void display(Event* Eptr[50],int(*read_events)(Event , int ));
int *Fptr = &read_Events;//#2 Is this possible?
那是不正确的。 &read_Events
的值等于指向函数的指针。您需要
int(*Fptr)(Event , int ) = &read_Events;
您也可以使用更简单的版本。
int(*Fptr)(Event , int ) = read_Events;
您还可以使用编译器的功能来推断类型并使用
auto Fptr = &read_Events;
话虽如此,但我不清楚您打算如何使用功能指针。您发布的代码中没有呼叫display()
。