Как составить список функций в C ++? - PullRequest
0 голосов
/ 05 июля 2018

Я хочу сделать список функций, но 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)' 

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Другим решением может быть использование 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;
}
0 голосов
/ 05 июля 2018

void(*)(int ) - это тип указателя на функцию, возвращающий void, а не void*

указатель на функцию, необходимую для f, равен void*(*)(int )

и f нужен оператор возврата

или, как сказал PaulR, вы не хотите, чтобы ваша функция возвращала что-либо, и ваш указатель функции хорош, но объявление вашей функции должно быть

void f(int numeraccio)

Инстальд

void * f(int numeraccio)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...