如何用我的函数填充向量?
Posted
技术标签:
【中文标题】如何用我的函数填充向量?【英文标题】:How can I populate a vector with my functions? 【发布时间】:2020-03-29 04:29:03 【问题描述】:#include <iostream>
#include<string>
#include<vector>
#include<functional>
using namespace std;
void straightLineMethod();
void unitsOfActivity();
void decliningMethod();
int main()
using func = std::function<void()>;
string inputMethod;
string depreciation[3] = "straight line","units of activity","declining" ;
std::vector<func> functions;
functions.push_back(straightLineMethod);
functions.push_back(unitsOfActivity);
functions.push_back(decliningMethod);
cout << " Enter the method of depreciation you're using: " << depreciation[0] << ", " << depreciation[1] << " , or " << depreciation[2] << endl;
cin.ignore();
getline(cin, inputMethod);
for (int i = 0; i <functions.size() ; i++)
while(inputMethod == depreciation[i])
functions[i]();
我尝试研究答案并了解如何使用std::function
,但我并不完全理解它的作用。在网上很难找到与这个问题相关的答案。本质上,我想要的是将三个函数放在一个向量中,将用户输入与字符串数组进行比较,然后使用数组中的索引来使用向量中的相关索引来调用函数。这对我来说似乎是个好主意,但它失败了。在这种情况下使用.push_back
尝试填充向量给了我一个
E0304 error: no instance of overloaded function matches the argument list.
Edit: Specifically, I dont know what the syntax: using func= std::function<void()> is actually doing. I just added it to the code to try to get it to work , thats why my understanding is limited in troubleshooting here.
Edit: the E0304 error is fixed by correcting the syntax to reference the function instead of calling it. And i changed functions[i] to functions[i]() to call the functions, although it is still not working.
【问题讨论】:
您对它们有什么不了解的地方?这将帮助人们根据您的需求定制响应。写解释只是为了发现你已经理解了其中的一部分是没有用的。 ***.com/questions/1112584/stdvector-of-functions 他们在这个帖子上回答了同样的问题,请查看 你知道你的代码永远不会终止吗? @TanveerBadar 为什么会这样?while
循环,一旦进入,永远不会终止。
【参考方案1】:
看起来您混淆了函数调用语法,并传递了一个实际(对 a 的引用)函数。在你的functions.push_back(functionNameHere)
中删除内部()
,你不想调用那个函数,你想把函数本身推到向量中。另一方面,你的functions[i]
应该是functions[i]()
,因为这里你实际上是在调用函数。
例如,这绝对有效:
void testMethod()
cout << "test method has been called\n";
int main()
using func = std::function<void()>;
std::vector<func> functions;
functions.push_back(testMethod);
functions[0]();
在这里运行 - http://cpp.sh/2xvnw
【讨论】:
嘿,谢谢你的提示!修复了错误。我也将 for 循环内的语法更改为 functions[i]() ,但不幸的是,它仍然没有调用该函数..虽然它是一个开始。 @FreddyIngle - 我添加了一个绝对适用于参考的最小示例。 太棒了,是的,我看到这肯定是这样的。我如何让它根据用户输入调用 3 个函数中的 1 个。使用嵌套 if 语句会更好吗? 首先,删除 cin.ignore(),您忽略了实际的第一个输入而不是读取它。其次,用if
替换while
,你真的不想在一段时间内无限期地运行你的函数。除此之外,它看起来不错,至少第一眼看上去是这样。必要时进行调试。在这里,这几乎是您运行的代码,只是我提到的更改 - onlinegdb.com/rJYwe36UU
请注意,在您的原始帖子编辑中,您没有将()
添加到实际的函数调用中。以上是关于如何用我的函数填充向量?的主要内容,如果未能解决你的问题,请参考以下文章