//Menu.h
#include<iostream>
#include<conio.h>
#include <map>
#include <string>
#include <functional>
#include <utility>
using namespace std;
map<string,function< void() > > mapa;
string names[100];
string functions[100];
char keys[100];
int pos=0;
void menu(string name,char key,string functionc)
{
names[pos]=name;
keys[pos]=key;
functions[pos]=functionc;
mapa.insert(map<string,function< void()> >::value_type(functionc,functionc));
pos++;
}
void write()
{
for(int i=0;i<pos;i++)
{
cout<<names[pos]<<" ";
cout<<endl;
}
}
错误:错误1错误C2064:术语未评估为函数 拿0个参数
//Main.cpp
#include <iostream>
#include <map>
#include <string>
#include"Menu.h"
using namespace std;
void ime()
{
cout<<"k";
}
int main() {
menu("ime1",'c',"ime");
pisi();
system("PAUSE");
return 0;
}
我想使标题通用,以便用户可以制作菜单。 它会告诉它的名字以及需要按哪个字符来访问它的功能 用户将使用它自己的功能然后从它需要使用它的头....
答案 0 :(得分:4)
C ++不支持此功能。您需要一个名为 reflection 的编程语言属性。
请改用脚本语言。
答案 1 :(得分:1)
您正试图从std::function<void()>
点击std::string
:
map<string,function< void()> >::value_type(functionc,functionc)
// ^^^^^^^^^
你需要传递一些没有参数可调用的东西,返回void
。例如:
void foo() {};
mapa.insert(std::make_pair(functionc, foo));
答案 2 :(得分:1)
我可以通过更改代码来编译代码:
#include <iostream>
#include <conio.h>
#include <map>
#include <string>
#include <functional>
#include <utility>
using namespace std;
map<string,string > mapa;
string names[100];
string functions[100];
char keys[100];
int pos=0;
void menu(string name,char key,string functionc)
{
names[pos]=name;
keys[pos]=key;
functions[pos]=functionc;
mapa.insert(std::make_pair(functionc,functionc));
pos++;
}
void write()
{
for(int i=0;i<pos;i++)
{
cout<<names[pos]<<" ";
cout<<endl;
}
}
我担心顶部的menu.h评论 - 这是一个头文件吗? 现在,这已经对编译错误进行了排序,但可能没有按照你想要的那样做。你想要一个名称映射到函数吗?
std::map<std::string, std::function<void()>> strings_to_functions;
函数不带参数并返回void,例如
void fn1()
{
std::cout << "fn1\n";
}
我现在可以将它添加到地图中,
strings_to_functions.insert(std::make_pair("fn1", fn1));
并将其命名为
strings_to_functions["fn1"]();
答案 3 :(得分:0)
//MENU.h
#include<iostream>
#include<conio.h>
#include <map>
#include <string>
#include <functional>
#include <utility>
using namespace std;
map<string,function< void() > > mapa;
string names[100];
string functions[100];
char keys[100];
int pos=0;
void menu(string name,char key, function< void() >functionc)
{
names[pos]=name;
keys[pos]=key;
functions[pos]=functionc;
mapa.insert(std::make_pair(name,functionc));
pos++;
}
//Main.cpp
#include <iostream>
#include <map>
#include <string>
#include"Menu.h"
using namespace std;
void ime()
{
cout<<"k";
}
int main() {
menu("ime1",'c', ime);
pisi();
system("PAUSE");`enter code here`
return 0;
}