c++ - 尝试使用 C++ 中的函数库将函数作为参数传递,但它不起作用
问题描述
// 我将定义所有涉及的函数。
//首先是我要传递的排序函数。
void bubbleSort(vector<int> &vector);
//其次是调用函数的函数,该函数应该将函数作为参数。
int testSorts(vector<int> &vector, ofstream& outfile, string data)
{
displaySort(vector, outfile, sortName, bubbleSort);
}
//这是应该将向量、文件和函数作为参数的函数。
// 当我运行它时,我得到以下错误。[错误] 模板参数 1 无效
void displaySort(vector<int>& vector, ofstream& outfile, string data, std::function<void
(vector<int>& vector)> func)
{func(vector);}
//这是我从堆栈溢出中得到的代码。我想知道为什么我的没有。我做了同样的事情。
#include <functional>
double Combiner(double a, double b, std::function<double
(double,double)> func){
return func(a,b);
}
double Add(double a, double b){
return a+b;
}
double Mult(double a, double b){
return a*b;
}
int main(){
Combiner(12,13,Add);
Combiner(12,13,Mult);
}
解决方案
不要这样做using namespace std;
并指定命名空间,它应该可以工作:
void displaySort(std::vector<int>& vector, std::ofstream& outfile,
std::string data, std::function<void(std::vector<int>&)> func)
{
func(vector);
}
如果您出于某种原因想要坚持使用,请在规范中using namespace std;
添加::
before :vector
function
void displaySort(vector<int>& vector, ofstream& outfile,
string data, function<void(::vector<int>&)> func)
// ^^
{
func(vector);
}
推荐阅读
- snmp - 通过更改 MIB 值(SNMPv2 到 SNMPv3),不会收到新的 SNMP 陷阱
- java - 如何在java中绘制或填充梯形?
- javascript - 动态创建的表上的弹出框问题
- javascript - 如何在Javascript中将列表转换为有序列表?
- c++ - 如何在 Visual Studio for C++ 中更改工作目录
- nuxt.js - 在 Nuxt.js 中实现 google API
- unity3d - 当我在 Unity 中构建时。我收到一个名为“错误 CS0246:找不到类型或命名空间名称‘WebSocketSharp’”的错误
- javascript - 从同一页面上的不同表单中提取输入项
- spring - Spring Cloud Gateway 设置多个虚拟主机
- javascript - 使用 cron 和 node.js 发送预定消息