C++primer 中函数指针和vector 迭代器的使用,代码如下:

C++语言 码拜 9年前 (2016-06-09) 877次浏览
#include <iostream>
#include <vector>
using namespace std;
int Add(const int &v1,const int &v2){return v1+v2;}
int Sub(const int &v1,const int &v2){return v1-v2;}
int Mul(const int &v1,const int &v2){return v1*v2;}
int Div(const int &v1,const int &v2){return v1/v2;}
typedef int(*vecFun1)(const int &,const int &);
typedef int vecFun2(const int &,const int &);
typedef decltype(Add) vecFun3;
typedef decltype(Add) *vecFun4;
int main()
{
vector<int (*)(const int &,const int &)>vecFunP1{Add,Sub,Mul,Div};
vector<decltype(Add)*>vecFunP2{Add,Sub,Mul,Div};
vector<vecFun1>vecFunP3{Add,Sub,Mul,Div};
vector<vecFun2*>vecFunP4{Add,Sub,Mul,Div};
vector<vecFun3*>vecFunP5{Add,Sub,Mul,Div};
vector<vecFun4>vecFunP6{Add,Sub,Mul,Div};
for(auto &FunP:vecFunP6)
{
cout<<FunP(4,2)<<endl;
}
for(auto iter=vecFunP6.begin();
iter!=vecFunP6.end();++iter)
{
cout<<iter(4,2)<<endl;
}
return 0;
}
出错的地方:
for(auto iter=vecFunP6.begin();
iter!=vecFunP6.end();++iter)
{
cout<<iter(4,2)<<endl;
}
迭代器访问出错;出错代码
vectorFunP.cc:27:23: error: no match for call to ‘(__gnu_cxx::__normal_iterator<int (**)(const int&, const int&), std::vector<int (*)(const int&, const int&)> >) (int, int)’
cout<<iter(4,2)<<endl;
改成*iter(4.2)或**iter(4,2)都是错的
求各位高手解答!
解决方案

20

(*iter)(4,2) 应该就可以了

40

(*iter)(4,2) 注意优先级,所以要加括号

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++primer 中函数指针和vector 迭代器的使用,代码如下:
喜欢 (0)
[1034331897@qq.com]
分享 (0)