hrefspace

 找回密码
 立即注册
搜索
热搜: PHP PS 程序设计
查看: 1176|回复: 9

no matching function for call to bind(unresolved overloaded function type

[复制链接]

523

主题

523

帖子

1599

积分

大司空

Rank: 5Rank: 5

积分
1599
发表于 2024-2-25 11:17:21 | 显示全部楼层 |阅读模式
俺是C++新手,想玩玩C++里面的新东西,可遇到问题了,不知怎么解决,望大侠指点迷津。
make报错信息为:
test.cpp: In function 'int main()':
test.cpp:20:94: error: no matching function for call to 'bind(<unresolved overloaded function type>, std::tr1::_Placeholder<1>&, double)'
mingw32-make: *** [test.o] Error 1

代码:
  1. #include <tr1/functional> #include <tr1/cmath>#include <algorithm> #include <iostream> #include <vector>#include <cmath> using namespace std::tr1::placeholders; void putout (double i) { std::cout<<std::fixed << " " << i;}int main() {     std::vector<double> v;        v.push_back(.3);        v.push_back(.8);        v.push_back(.7);        std::transform(v.begin(), v.end(), v.begin(), std::tr1::bind(std::tr1::comp_ellint_3, _1, .5));    std::for_each(v.begin(), v.end(), putout);     return 0;     }
复制代码
我用的是GCC 4.5.0,tdm的
回复

使用道具 举报

0

主题

171

帖子

36

积分

新手上路

Rank: 1

积分
36
发表于 2024-2-25 11:18:12 | 显示全部楼层
把上面代码中的std::tr1::comp_ellint_3 换成 pow ,atan2 等函数却能正常编译,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

202

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2024-2-25 11:19:08 | 显示全部楼层
std::tr1::comp_ellint_3是啥东东?
估计是它的类型不对,不匹配
回复

使用道具 举报

8

主题

206

帖子

44

积分

新手上路

Rank: 1

积分
44
发表于 2024-2-25 11:19:39 | 显示全部楼层
3# mathe
是Complete elliptic integral of the third kind 。
tr1里面的东东。
嗯,应该是的,
感觉是不能找到合适的重载类型
回复

使用道具 举报

0

主题

192

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2024-2-25 11:19:48 | 显示全部楼层
_1是啥东西?好像没有定义
回复

使用道具 举报

0

主题

182

帖子

67

积分

关内侯

Rank: 2

积分
67
发表于 2024-2-25 11:20:40 | 显示全部楼层
5# mathe

_1是bind的占位符,其全名是:std::tr1::placeholders::_1

由于用全局空间的函数atan2 ,pow 是正常的,于是我把std::tr1::comp_ellint_3函数的返回值放在一个自定义的全局函数里,就可以通过编译了:
  1. #include <tr1/functional> #include <tr1/cmath>#include <algorithm> #include <iostream> #include <vector>// #include <cmath> using std::tr1::placeholders::_1; void putout (double i) { std::cout<<std::fixed << " " << i;}double wraped (double a,double b) { return std::tr1::comp_ellint_3(a,b);}int main() {     std::vector<double> v;        v.push_back(.1);v.push_back(.2);v.push_back(.3);v.push_back(.4);        std::transform(v.begin(), v.end(), v.begin(), std::tr1::bind(wraped, _1, .5));    std::for_each(v.begin(), v.end(), putout);     return (0);     }
复制代码
但这种方法多了一重包装,不知道有没有直接的方法。
回复

使用道具 举报

0

主题

195

帖子

166

积分

关内侯

Rank: 2

积分
166
发表于 2024-2-25 11:21:11 | 显示全部楼层
问题解决了,comp_elint_3函数有多个重载,必须指定一个:
  1. #include <tr1/functional> #include <tr1/cmath>#include <algorithm> #include <iostream> #include <vector> using std::tr1::placeholders::_1; void putout (double i) { std::cout<<std::fixed << " " << i;}int main() {     std::vector<double> v;    v.push_back(.1);v.push_back(.2);v.push_back(.3);v.push_back(.4);    v.push_back(.5);v.push_back(.6);v.push_back(.7);v.push_back(.8);    std::transform(v.begin(), v.end(), v.begin(), std::tr1::bind(static_cast<double (*) (double,double)>(std::tr1::comp_ellint_3), _1, .5));    std::for_each(v.begin(), v.end(), putout);     return 0;  }
复制代码
回复

使用道具 举报

0

主题

212

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2024-2-25 11:21:50 | 显示全部楼层
或者将comp_elint_3 换成无重载冲突的comp_ellint_3l, comp_ellint_3f 函数
回复

使用道具 举报

0

主题

174

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2024-2-25 11:22:24 | 显示全部楼层
5# mathe
mathe, ,你对tr1不感兴趣吗

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

180

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2024-2-25 11:23:06 | 显示全部楼层
没用过,我不知道STL里面还有这些东东,什么时候添加进去的?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|hrefspace

GMT+8, 2024-11-24 08:17 , Processed in 0.064897 second(s), 23 queries .

Powered by hrefspace X3.4 Licensed

Copyright © 2022, hrefspace.

快速回复 返回顶部 返回列表