do_do,小刘飞刀,myan帮我看看

GuanXP 2002-01-17 05:54:34
class CA
{
void FuncA(int);
void FuncB(int);

void Func(void (CA::*p)(int)); //1
void FuncW(void CA::*p(int)); //2
//void FuncW(void CA::*(*p)(int)); //3
};
在上面的类中
我将 1 误写成 2
语句 2 在VC6中编译不能通过,在BCB5中可通过.
应该BCB5是正确的,它将 2 解释成和 3 等价,

问题是 2 这句话的具体意思是什麽?
...全文
170 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Last_Dodo 2002-01-23
  • 打赏
  • 举报
回复
语法没错。
句法应该是错的。但因你无法使用它(FuncW),所以没大问题。或使用是你会把它改成你要的。
语法是你不能改的,换句话说是电脑所要求的。句法实际上往往是你要求的东西。
GuanXP 2002-01-21
  • 打赏
  • 举报
回复
所以这应该算是BCB5编译器的错误了,对吗?
谢谢!
Last_Dodo 2002-01-19
  • 打赏
  • 举报
回复
对不起,来晚了。昨晚(我这是晚上,国内是白天),我没法连到公司(要改成用一次性秘码,但秘码卡未到)加上小孩吵得很,看了下问题但没答复。

void Func(void (CA::*p)(int)):参数是CA的成员函数指针(member method pointer)。此成员函数有一个整型参数没返回值。
void FuncW(void CA::*p(int)):参数是函数指针,此函数有一个整型参数返回void类型的CA成员指针(data member pointer).
void FuncW(void CA::*(*p)(int)):同上。
Kreutzer() 是对的,void CA::*p(int)没有语法错误但有句法错误。因为你不可能定义一个数据成员(data member)为void类型。但void *CA::*p(int)却是可以的。我想大家都熟悉成员函数指针和数据成员指针。
Kreutzer 2002-01-18
  • 打赏
  • 举报
回复
cannot declare pointer to 'void' member!!

void FuncW(void CA::*p(int));
估计和
void FuncW(void CA::*p);
等价
而void CA::*p就是
cannot declare pointer to 'void' member
GuanXP 2002-01-18
  • 打赏
  • 举报
回复
int CA::* Func(int)
{
return &CA::a;//打错了
}
各位继续!
GuanXP 2002-01-18
  • 打赏
  • 举报
回复
如果是将void 换成int
我知道是如下意义:
p是一个函数指针,它的返回值是
int CA::* 即CA的成员指针,参数是int
//----------------------------------
class CA
{
public:
int a;
void FuncW(void CA::*(*p)(int));
};
CA A;
int CA::* Func(int)
{
return &A::a;
}
A.FuncW(Func);
//--------------------------------
可是void CA::* 呢?什麽意思,想不明白!

cber 2002-01-18
  • 打赏
  • 举报
回复
我的测试是,将void换成int,VC6,BCC55和gcc 2.91.57都可以通过编译及运行
但如果只是void的话,只有bcc55可以编译运行
具体2和3的意义,我还在思考中
hedong 2002-01-18
  • 打赏
  • 举报
回复
关注中
GuanXP 2002-01-18
  • 打赏
  • 举报
回复
具体点
GuanXP 2002-01-18
  • 打赏
  • 举报
回复
//----------------------------------
class CA
{
public:
int a;
void FuncW(int CA::*(*p)(int));//都是copy惹的祸
};
CA A;
int CA::* Func(int)
{
return &CA::a;
}
A.FuncW(Func);
//--------------------------------
//****************************************
另外,后面发言的各位请先看看前面的贴子
再决定说什麽,不要浪费空间!!!!
//****************************************
to Kreutzer() 
我前面已经说过2和3等价,并不与void FuncW(void CA::*p)
等价,这是BCB编译器说的!!
helloeveryone 2002-01-17
  • 打赏
  • 举报
回复
是否支持都没多大影响吧?只不过是嵌套调用。

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧