各位大大,遇到问题了
#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 编辑 ]