| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1067 人关注过本帖
标题:。函数指针数组。不懂错误的意思
只看楼主 加入收藏
kun内阁双狂
Rank: 1
等 级:新手上路
帖 子:9
专家分:1
注 册:2013-11-29
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:12 
。函数指针数组。不懂错误的意思
#include<iostream>
using namespace std;
void square(float &x, float &y)
{
    x=x*x;
    y=y*y;
}
void cube(float &x, float &y)
{
    x=x*x*x;
    y=y*y*y;
}
void print(float &x, float &y)
{
    cout<<"长:"<<x<<"\t"<<"宽:"<<y<<endl;
}
void swap(float &x, float &y)
{
    float z;
    z=x;
    x=y;
    y=z;
}
int main(void)
{
    float a=2,b=3;
    char choice='0';
    int i;
    void (*p[5])(float &, float &);
    for (i=0; i<5; i++)
    {
        bool quit = false;
        cout<<"(0)退出,(1)平方,(2)立方,(3)交换x和y的值:";
        cin>>choice;
        switch (choice)
        {
        case '0': quit=true;    break;
        case '1': p[i]=square;    break;
        case '2': p[i]=cube;    break;
        case '3': p[i]=swap;    break;                //错误指向的地方
        default:p[i]=0;
        }
        if (quit)break;
        if (p[i]==0)
        {
            cout<<"请输入0到3之间的数字:";
            i=i-1;
            continue;
        }
        cout<<"第"<<i<<"次执行,到第5次结束\n";
        cout<<"初始值\n";
        print(a,b);
        cout<<"现在调用函数指针数组p["<<i<<"]所指向的函数...\n";
        p[i](a,b);
        cout<<"运算后\n";
        print(a,b);
    }
    return 0;
}
/*
——————————————————————————————————————
E:\c++\108函数指针数组\01.cpp(40) : error C2563: mismatch in formal parameter list
E:\c++\108函数指针数组\01.cpp(40) : error C2568: '=' : unable to resolve function overload
        could be 'void __cdecl swap(float &,float &)'
        E:\c++\108函数指针数组\01.cpp(17) : see declaration of 'swap'
        or       'void __cdecl std::swap(float &,float &)'
        d:\vc98\include\xutility(99) : see declaration of 'swap'
        or       'void __cdecl std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::swap(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,class std::basic_string<char,struct std:
:char_traits<char>,class std::allocator<char> > &)'
        d:\vc98\include\xstring(378) : see declaration of 'swap'
        or       'void __cdecl std::swap(_Ty &,_Ty &)'
        d:\vc98\include\xutility(99) : see declaration of 'swap'
Error executing cl.exe.

01.obj - 2 error(s), 0 warning(s)
——————————————————————————————————————
*/
搜索更多相关主题的帖子: include choice 
2013-12-10 21:59
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
函数重名了

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-12-11 08:13
欣飞飞
Rank: 1
等 级:新手上路
帖 子:20
专家分:1
注 册:2013-10-6
收藏
得分:0 
print本来就是输入swap函数本来就是交换,没必要在写个函数直接可以用的
2013-12-11 14:06
欣飞飞
Rank: 1
等 级:新手上路
帖 子:20
专家分:1
注 册:2013-10-6
收藏
得分:0 
printf是输入
2013-12-11 14:07
jiangcw007
Rank: 2
等 级:论坛游民
帖 子:9
专家分:16
注 册:2013-12-11
收藏
得分:15 
图片附件: 游客没有浏览图片的权限,请 登录注册
2013-12-11 16:25
jiangcw007
Rank: 2
等 级:论坛游民
帖 子:9
专家分:16
注 册:2013-12-11
收藏
得分:0 
太有意思了!我刚刚又思考了一下你的程序,发现无法绕过库函数,然后尝试用类来绕过去,发现可行,于是使用成员函数指针实现具体步骤,不过写完了,总觉得有一些多余的地方,总是发现不了,发出来大家给看看;

程序代码:
#include <iostream>
using namespace std;
class swp
{    
public:
    void swap(int &a,int &b)
    {
        int c;
        c=a;a=b;b=c;
        cout<<endl<<"swp::"<<endl;
    }
};
void swap(int &a,int &b)
{
    int c;
    c=a;a=b;b=c;
    cout<<endl<<"swap"<<endl;
}
int main()
{
    int a,b;
        a=1;
        b=2;
    swp ss;
    {
        typedef void (swp::*p)(int&,int&);
        p pclass = ss.swap;
        (ss.*pclass)(a,b);
        cout<<"指针调用:a="<<a<<" b="<<b<<endl;
        
    }
    {
        swap(a,b);
        cout<<"函数调用:a="<<a<<" b="<<b<<endl;
    }

    return 0;
}
2013-12-12 15:43
kun内阁双狂
Rank: 1
等 级:新手上路
帖 子:9
专家分:1
注 册:2013-11-29
收藏
得分:0 
回复 5楼 jiangcw007
/*
    根据5楼的回复我重新梳理了该程序,希望对各楼也有所收益:我学c++不是很久,对库的认识不够,不知道swap函数属于在库中已有定义,
    以至于读不懂错误的信息,我是把void型函数指针改为int型函数指针,在对应出也作出相应的改动,程序如下。5楼的第一种改法很简单,
    看了自然会懂。只是不知道使用这两种的利弊。。在这里顺便说一下6楼的程序,刚才始看很模糊,有几个代码以前没有看过,动了一下脑筋,
    再整理这些代码,还是可以明白他的意思的。谢谢各楼!谢谢!
*/
#include<iostream>
using namespace std;
int square(float &x, float &y)
{
    x=x*x;
    y=y*y;
    return x,y;
}
int cube(float &x, float &y)
{
    x=x*x*x;
    y=y*y*y;
    return x,y;
}
void print(float &x, float &y)
{
    cout<<"长:"<<x<<"\t"<<"宽:"<<y<<endl;
}
int swap(float &x, float &y)
{
    float z;
    z=x;
    x=y;
    y=z;
    return x,y;
}
int main(void)
{
    float a=2,b=3;
    char choice='0';
    int i;
    int (*p[5])(float &, float &);
    for (i=0; i<5; i++)
    {
        bool quit = false;
        cout<<"(0)退出,(1)平方,(2)立方,(3)交换x和y的值:";
        cin>>choice;
        switch (choice)
        {
        case '0': quit=true;    break;
        case '1': p[i]=square;    break;
        case '2': p[i]=cube;    break;
        case '3': p[i]=swap;    break;                //错误指向的地方
        default:p[i]=0;
        }
        if (quit)break;
        if (p[i]==0)
        {
            cout<<"请输入0到3之间的数字:";
            i=i-1;
            continue;
        }
        cout<<"第"<<i<<"次执行,到第5次结束\n";
        cout<<"初始值\n";
        print(a,b);
        cout<<"现在调用函数指针数组p["<<i<<"]所指向的函数...\n";
        p[i](a,b);
        cout<<"运算后\n";
        print(a,b);
    }
    return 0;
}
2013-12-12 20:52
IT男year
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:82
专家分:106
注 册:2013-6-9
收藏
得分:0 
void (*p[5])(float &, float &);大神这句什么意思呀?帮忙解释一下,我好想没有见过!

[ 本帖最后由 IT男year 于 2013-12-12 22:02 编辑 ]
2013-12-12 21:03
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:3 
回复 6楼 jiangcw007
你觉得命名空间是干嘛的...
你不要用using namespace
自然就不会重...

废那心思,还拿个类包着干嘛...
简单问题复杂化...

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-12-13 09:44
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:2 
回复 8楼 IT男year
C语言定义函数指针的一种方式

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-12-13 09:45
快速回复:。函数指针数组。不懂错误的意思
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047210 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved