1

如果我把代码放在第一位,我认为这会更有意义:

我有一个这样定义的成员变量:

std::queue<void (*)()> fptrs;

...并试图像这样弹出一个指针:

void (*f)() = fptrs.pop();

我得到的“警报”是这样的:

Assigning to 'void (*)()' from incompatible type 'void'

似乎我没有将函数指针放入我的队列中,或者它们被神奇地变换了出来。不管怎样,我不知道如何解决这个问题,我已经摆弄了一段时间。

谢谢您的帮助。

4

2 回答 2

1

std::queue::pop()返回void。您需要拨打 to std::queue::front(),然后拨打 to std::queue::pop()

typedef为了便于阅读,我建议使用函数指针。

于 2013-06-08T09:10:48.600 回答
0
#include <iostream>
#include <queue>
using namespace std;

typedef void (*pFun)();

void fun1(){ printf("fun1\n"); }
void fun2(){ printf("fun2\n"); }
int main()
{
    queue<pFun> d;
    d.push(fun1);
    d.push(fun2);

    pFun fun = d.front();
    fun();
}
于 2013-06-08T10:25:08.620 回答