标题:各位大大,遇到问题了
只看楼主
飞扬冲天
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:122
注 册:2011-10-21
结帖率:66.67%
 问题点数:0 回复次数:2 
各位大大,遇到问题了
#include
using namespace std;
class Widget
{
    void f(int){ cout<< "Widget::f()\n";}
    void g(int){ cout<< "Widget::g()\n";}
    void h(int){ cout<< "Widget::h()\n";}
    void i(int){ cout<< "Widget::i()\n";}
    enum { cnt = 4 };
    void (Widget::*fptr[cnt])(int) 地方//求解啊....为什么这个地方会有个 Widget::  呢?
   
public:
   
    Widget()
    {
        fptr[0] = &Widget::f;   // 如过把  Widget:: 去掉这儿就会说不能将void (Windger::*)(int)的值分配到void (*)(int)类型的实体,
        fptr[1] = &Widget::g;
        fptr[2] = &Widget::h;
        fptr[3] = &Widget::i;
    }
   
    void select(int i, int j)
    {
        if(i<=0 || i>cnt)
            return;
        (this->*fptr[i-1])(j);
    }
    int count()
    {
        return cnt;
    }
};


int main()
{
    Widget w;
    int i;
    while(true)
    {
        cout<<"选择(按0退出):";
        cin >>i;
        if(i == 0)
            break;
        w.select(i,47);
    }
    system("pause");
    return 0;
}


还有一个问题:
#include <iostream>
using namespace std;
class Func
{
public:
    Func()
    {
        fpt[0] = f;    为什么我在VC里编译都行,但在VS里这儿就有问题了?   “Func::f”: 函数调用缺少参数列表;请使用“&Func::f”创建指向成员的指针
        fpt[1] = g;                                                          这是什么意思啊?,    加上参数列表不久成了  f()  了?.
        fpt[2] = h;
    }
    enum { cnt = 3};
    void (Func::*fpt[cnt])();
    void selete(int i)
    {
        if(i<=0||i>cnt)
            return;
        (this->*fpt[i-1])();
    }
private:
    void f(){ cout<< "Function f()"<<endl;}
    void g(){ cout<< "Function g()"<<endl;}
    void h(){ cout<< "Function h()"<<endl;}
};

int main()
{
    Func fun;
    int i;
    cin >>i;
    fun.selete(i);
    return 0;
}


这两个程序到底有什么地方不同啊?为什么把下面构造函数里改成 :  
Func()
    {
        fpt[0] = &Func::f();
        fpt[1] = &Func::g();
        fpt[2] = &Func::h();
    }

后却要报错说   :“&”要求左值

??


[ 本帖最后由 飞扬冲天 于 2012-5-3 21:59 编辑 ]
搜索更多相关主题的帖子: void include public Widget 
2012-05-03 20:40
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
前两个是基本语法,google“成员函数指针”
第三个的意思是 --- 顺便说一句,你能不能别用狗屎的中文版 --- 如果你是想调用函数指针,那么缺少了函数参数;如果是想取成员函数地址,那么应该使用&Func::f
第四个问题,和你前面写得一样,应该改 fpt[0] = &Func::f(); 为 fpt[0] = &Func::f;
2012-05-04 08:18
飞扬冲天
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:122
注 册:2011-10-21
得分:0 
回复 2楼 rjsp
哦,谢谢...我现在下了英文版的了....
2012-05-20 20:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-366892-1-1.html




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

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