| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 545 人关注过本帖
标题:【求教】请问大家:指向函数的指针作为一个类的成员,如果通过对象调用它, ...
取消只看楼主 加入收藏
jojo59516
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2012-4-2
结帖率:25%
收藏
已结贴  问题点数:20 回复次数:3 
【求教】请问大家:指向函数的指针作为一个类的成员,如果通过对象调用它,实现调用所指向的函数的目的?
问题RT,下面给出自己编写的程序(一部分)作为错误的例子,希望大神帮忙修改,最好能有解释,谢谢啦~~~~!!!!

#include <iostream>
#include <string>
class Equation
{
private:
    int answer,m;
    void (*mode[3])();                                  //定义了一个指向函数的指针数组
public:
    Equation();
    void setmode();
    void addition();
    void subtraction();
    void multiplication();
    int getanswer () const {return answer;}
    void *run () const {return mode[m];}                 //定义了一个指针类的函数,我希望通过这个指针函数来调用那个指针,从而调用所指向的函数
};
#endif
#include "Random.h"
#include "Equation.h"
#include <string>
#include <iostream>
using namespace std;
namespace
{    const string CORRECT_INFO[]={"Good job!","Correct,again!","You are so clever!","Wow,a talent!","You did it, Congratulations!"};
    const string WRONG_INFO[]={"Just carelessness,cheer up!","What a pity!","Sorry, you are fail."};
};
int main()
{    int score,ans,i,j;
    char whethergo;
    Equation equ;
    cout<<"Welcome to Guess!"<<endl;
    for (i=1;i<=10;i++)
    {    cout<<"Question "<<i<<endl;
        *equ.run();                                    //调用了那个指针类的函数,编译后报错
        for (j=0;j<3;j++)
        {    cin>>ans;
            if (ans==equ.getanswer())
            {    Random r(4);
                score+=10;
                cout<<"Right!"<<endl<<CORRECT_INFO[r.getr()]<<endl;
                break;
            }
            else
            {    Random r(2);
                cout<<"Wrong"<<endl<<WRONG_INFO[r.getr()]<<endl;
            }
        }
        if (j==3)
            cout<<"Sorry, you have no chances."<<endl;
        cout<<"Go ahead?(Y/N)";
        cin>>whethergo;
        if (whethergo=='N')
        {    cout<<"Your score is "<<score<<endl;
            break;
        }
    }
    if (i==11)
        cout<<"You have complete the game!"<<endl<<"Your score is "<<score<<endl;
    cout<<"Thank you for your support! Press any key to quit.";
    cin>>i;
    return 0;
}

--------------------Configuration: main - Win32 Debug--------------------
Compiling...
main.cpp
F:\study\VC++\guess\main.cpp(17) : error C2100: illegal indirection
执行 cl.exe 时出错.

main.obj - 1 error(s), 0 warning(s)

我的最终目的是在主程序中设法调用指向函数的指针*mode[i],通过它运行所指向的程序。至于那个指针类的函数(外部接口)*run()是我自己理解的,不知道这样的做法对不对。我是初学者,真心求教~!!谢谢~~~~~~!!
搜索更多相关主题的帖子: void addition private include public 
2012-04-12 23:40
jojo59516
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2012-4-2
收藏
得分:0 
回复 3楼 寒风中的细雨
感谢版主大人~~~~~写的太详细了好感动~~~~
2012-04-13 13:05
jojo59516
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2012-4-2
收藏
得分:0 
回复 4楼 jojo59516
编译通过了,连接又有问题了T T继续求教啊。。。。谢谢谢谢谢谢
直接把程序代码传上来了。。。这个程序用来生成一个50以内的加减或9以内的乘法算式题,并让用户输入结果,有三次常识机会,一共10题每答对一道题10分。
新手写代码习惯可能不好。。。总之谢谢谢谢谢谢。。。

连接后错误:
--------------------Configuration: main - Win32 Debug--------------------
Linking...
main.obj : error LNK2001: unresolved external symbol "public: __thiscall Random::Random(int)" (??0Random@@QAE@H@Z)
main.obj : error LNK2001: unresolved external symbol "public: __thiscall Equation::Equation(void)" (??0Equation@@QAE@XZ)
Debug/main.exe : fatal error LNK1120: 2 unresolved externals
执行 link.exe 时出错.
guess.rar (1.97 KB)
2012-04-14 00:08
jojo59516
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2012-4-2
收藏
得分:0 
回复 6楼 jojo59516
可是书上还说最好把类的定义写到头文件里呢,现在又运行不成功。。这是为什么呢??
2012-04-16 01:05
快速回复:【求教】请问大家:指向函数的指针作为一个类的成员,如果通过对象调用 ...
数据加载中...
 
   



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

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