gpt4 book ai didi

C++传递指向函数错误的指针

转载 作者:行者123 更新时间:2023-11-28 03:03:06 24 4
gpt4 key购买 nike

我一直在尝试解决如何将指向函数的指针保存到变量中的问题。

基本上我有一个优先级队列,它由这种类型的结构组成:

typedef void (*calendar::eventPointer) ();

struct actRecord{
double actTime;
int prio;
eventPointer eventPtr;
};

我想做的是在 Main.cpp 中调用函数 Calendar::CalendarPush(),向它传递参数 timepriority 和指向类(而不是对象)Transaction::Event1() 方法的指针。

但我仍然收到错误:

a pointer to a bound function may only be used to call the function

完整代码:

------------MAIN.CPP------------

int main() {
cout << "Inicializuji" << endl;
double time = 0.0;
int priority = 0;
calendar cal;
transaction tran;

cout << "Planuji prvni event" << endl;

cal.calendarPush(time, priority, &transaction::event1);

return 0;
}

------------CALENDAR.H------------

class calendar {
private:
typedef void (transaction::*eventPointer) ();

struct actRecord{
double actTime;
int prio;
eventPointer eventPtr;
};

std::priority_queue<actRecord> cal;

public:
calendar();
~calendar();

bool calendarEmpty();
void calendarPush(double, int, eventPointer);
void calendarPop();
actRecord calendarTop();
};

------------日历.CPP------------

bool calendar::calendarEmpty() {
return cal.empty();
}

void calendar::calendarPush(double time, int priority, eventPointer eve) {

actRecord record;

record.actTime = time;
record.prio = priority;
record.eventPtr = eve;

cal.push(record);
}

calendar::actRecord calendar::calendarTop() {

return cal.top();
}

void calendar::calendarPop() {

cal.pop();
}

------------TRANSACTION.H------------

class transaction {

typedef void (*eventPointer) ();

struct actRecord{
double actTime;
int prio;
eventPointer eventPtr;
};

public:
void event1();
void event2();
void event3();
void event4();
};

------------TRANSACTION.CPP------------

void transaction::event1() {

return;
}

void transaction::event2() {

return;
}

void transaction::event3() {

return;
}

void transaction::event4() {

return;
}

最佳答案

你的代码有两个问题:

  • main 中,您应该像这样传递一个指向成员函数的指针:cal.calendarPush(time, priority, &transaction::event1);

  • 您定义了两种 eventPointer 类型 - 一种在 calendar 中,一种在 transaction 中。您的方法 calendarPush 接受指向 calendar 成员而不是 transaction 成员的指针。在这件事上下定决心。对于你当前编译 main 行的代码应该是:cal.calendarPush(time, priority, &calendar::calendarPop); 例如,但我猜它是不是你想要的。

如果要改成交易:

  • 确保 transactioncalendar 之前定义(比如在 calendard.h 中包含 transaction.h >)

  • calendar 中使用它:typedef void (*transaction::eventPointer) ();

  • 请看上面的第一点

什么会更好:尝试阅读 std::function .

关于C++传递指向函数错误的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20299512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com