1

コードを最初に置くと、これはより理にかなっていると思います。

私はそのように定義されたメンバー変数を持っています:

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

...そして、次のようにポインタをポップしようとしています:

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

私が受け取る「アラート」は次のとおりです。

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

関数ポインターをキューに入れていないか、魔法のように変換されて飛び出しているようです。いずれにせよ、これを修正する方法がわからないので、少しいじりました。

助けてくれてありがとう。

4

2 に答える 2

1

std::queue::pop()戻りますvoidstd::queue::front()への呼び出しに続いて、への呼び出しが必要ですstd::queue::pop()

typedef読みやすくするために、関数ポインタにa を使用することをお勧めします。

于 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 に答える