C++传递指向函数错误的指针
C++ passing pointer to a function error
我在试图解决如何将指向函数的指针保存到变量中时遇到了一些问题。
基本上我有一个优先级队列,它由以下类型的结构组成:
typedef void (*calendar::eventPointer) ();
struct actRecord{
double actTime;
int prio;
eventPointer eventPtr;
};
我想做的是调用Main.cpp
中的函数Calendar::CalendarPush()
,将参数time
、priority
和指向类(而不是对象)Transaction::Event1()
的方法的指针传递给它。
但我仍然收到一个错误:
指向绑定函数的指针只能用于调用函数
完整代码:
----------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;
}
----------日历。--------
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();
}
----------交易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);
,但我猜这不是您想要的。
如果您想更改为交易:
-
确保在
calendar
之前定义了transaction
(类似于在calendard.h
中包含transaction.h
) -
在
calendar
:typedef void (*transaction::eventPointer) ();
中使用此 -
看看上方的第一个点
更好的办法是:试着读一下std::function
。
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 运行几次后合并段错误C++(指针算术)
- LinkedList实现C 错误指针间接
- 虚幻引擎 4.18.0,VS2017,不允许指向不完整类类型的错误指针
- Xcode 错误:指针和双精度之间的比较
- 未分配正在释放的本机node.js插件错误指针
- 错误指针:解析令牌时无法计算表达式
- C++-va_list错误指针
- 为什么我收到错误" (指针的名称)不是模板)?
- mmap 错误:分段错误/指针无效错误
- C++ Winsock2 错误指针断点触发
- C++ 代码中的错误指针错误
- 数组错误指针上的增量运算符
- MAKEINTRESOURCE 返回资源 ID 的错误指针
- 分段错误C++指针
- 段错误指针
- C++ 错误 :: 指针数组的EXC_BAD_ACCESS
- 通过模糊 mat 从 std::vector: <int>cv::Exception 中获取错误指针
- 正在解决编译器错误:指针可能未初始化