我想列出一个功能列表,但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)'
答案 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;
}