如何列出C ++中的函数?

时间:2018-07-05 08:54:11

标签: c++ list

我想列出一个功能列表,但push_back不起作用,有人可以告诉我为什么吗?

#include "stdafx.h"
#include <string>
#include <iostream>
#include <list>
    using namespace std;
    void * f(int numeraccio) {
        numeraccio++;
        cout << " " << numeraccio << " " << endl;
    };


   int main()
{

    list<void(*)(int )> l;
    l.push_back(f);
    getchar();

    return 0;
}

我收到此错误

Error C2664 'void std::list<void (__cdecl       *)(int),std::allocator<_Ty>>::push_back(const _Ty &)': impossible to convert the argument 1 from 'void *(int)' to 'void (__cdecl *&&)(int)' 

3 个答案:

答案 0 :(得分:6)

void(*)(int )是返回void而不是void*的函数指针的类型

f所需的函数指针为void*(*)(int )

和f需要一个return语句

或正如PaulR所说,您不希望函数返回任何内容,并且函数指针很好,但函数声明应为

void f(int numeraccio)

void * f(int numeraccio)

答案 1 :(得分:0)

您可以使用cflow

cflow -d 1 -b --omit-arguments --omit-symbol-names FILE_NAME.c | sed 's / <。*>://'>〜/ LIST_FUN

答案 2 :(得分:-1)

另一种解决方案可能是使用std::function<void(int)>

#include "stdafx.h"
#include <string>
#include <iostream>
#include <list>
#include <functional>

using namespace std;
    void f(int numeraccio) { // removed '*' because you are not returning anything
        numeraccio++;
        cout << " " << numeraccio << " " << endl;
    };


int main()
{

    list<std::function<void(int)> > l; // see this line 
    l.push_back(f);
    getchar();

    return 0;
}