注册 登录
编程论坛 C++教室

vector 元素为指向函数的指针

gobraves 发布于 2014-06-04 01:27, 851 次点击
程序代码:

#include<iostream>
#include<vector>
using namespace std;


int cal(int a,int b)
{
    cout<<a<<b<<endl;
    return a+b;
}


int main()
{
    int x=9;
    int y=8;
    typedef int q(int,int);
    vector<q*> v(4,0);                 //若把这里改为 q* v;
    v[0]=cal;                          //             v=cal;
    cout<<v[0](x,y);                   //             v(x,y)
                                       
//      

    return 0;
}


为啥按注释里那样写就没错,我换用vector后就有问题。
我把编译器报错的说明放这:
error: invalid conversion from 'int' to 'std::vector<int (*)(int, int)>::value_type {aka int (*)(int, int)}' [-fpermissive]|

我的理解是一个整形转换为vector<int (*)(int, int)>不合法,但没找到啊

请各位帮忙看看,谢谢了
10 回复
#2
TonyDeng2014-06-04 02:39
不懂玩語言游戲
#3
rjsp2014-06-04 08:53
要么,你换个『支持C++得不那么烂』的编译器试试
#4
gobraves2014-06-04 13:59
回复 3 楼 rjsp
我用是的codeblocks,那个用的应该是mingw的编译器
我想问下,我这程序写的有问题吗?
#5
gobraves2014-06-04 14:02
回复 2 楼 TonyDeng
这是c++primer第五版上的一个题,我搞不懂为什么出错
#6
hubinyes2014-06-06 21:23
vector<q*> v(4,0); 0不就是一个整形吗?初始化4个0.
#7
TonyDeng2014-06-06 21:35
以下是引用gobraves在2014-6-4 14:02:02的发言:

这是c++primer第五版上的一个题,我搞不懂为什么出错

 我虽然没第五版,但也不大相信它会有这样的代码示范。第四版我是有的,但提到typedef的就不过半页纸,也没教读者用这个来作函数的同义词。在C++中,极少用typedef的,难道第五版倒退了居然重点介绍这个东西起来了?

[ 本帖最后由 TonyDeng 于 2014-6-6 21:36 编辑 ]
#8
zklhp2014-06-07 11:43
楼主的代码 我这里GCC 4.9.0 -Wall 没有error和warning
#9
gobraves2014-06-09 09:01
回复 8 楼 zklhp
我codeblocks用的是gcc 4.7.1的编译有问题,我用vs2013就没问题,无语了
#10
gobraves2014-06-09 09:08
回复 3 楼 rjsp
的确是编译器问题
#11
zklhp2014-06-09 09:55
以下是引用gobraves在2014-6-9 09:01:33的发言:

我codeblocks用的是gcc 4.7.1的编译有问题,我用vs2013就没问题,无语了

我来告诉你原因

gcc加-std=c++11能编译过 如果不加 编译不过

至于VS的参数我不懂 就不知道了

1