一个代码实现的问题:关于公共属性的设定。

chinagdh 2004-03-24 03:05:27
如相, 一个类

class CObject
{
public:
int PPP;
static void SetP(int p) { PPP = p; }
}

上面的SetP函数不能编译通过,因为SetP是全局域内的,并不属于这个类,
所以, PPP=p;这句是错的,但是,目前我就有这样的需求,
一个外部调用需要一人回调函数,就是SetP那样的函数,我需要把这个函数做为参数
传递给另一个函数。那么,如果不能这样实现,如何完成我能把这个函数做为参数
传给需要回调函数的?

其实就是,一个SetP这样的static函数,,如何设置一个类的变量值呢?
呵呵。
请问C++思想中,是否有这方面的表示?
...全文
51 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
柯本 2004-03-24
  • 打赏
  • 举报
回复
我还是没明白楼主的真正意图
CObject::SetP( wParam );
在运行状态下创建的所有CObject对象的 int PPP值都被改变了
既然所有的PPP都是同一时改变,为什么不用同一变量代替(也就是说也用静态)
或我想只能像楼上所说的哪样
diaoni 2004-03-24
  • 打赏
  • 举报
回复
无论谁发出了WM_ADDDRIVERS 并且给出P
就把这个类的任何一个实例的PPP 设置为该值。

晕,只是这样的话,哪用如此大费周折

维护一个包含指向所有cobject实例的表,SetP(int)作为一个全局函数,其中遍历该表,改变每一个cobject对象的ppp的值
柯本 2004-03-24
  • 打赏
  • 举报
回复
GZ
chinagdh 2004-03-24
  • 打赏
  • 举报
回复
void cobject::Setp(void * pthis,int p)
{
cobject * pobj ;
pobj = (cobject *) p;
pobj->ppp = p;
}
cobject obj;
void caller(cobject::Setp,&obj,30);

上面这个不行 那个函数要求不能有 void * pthis 这样的定义!
只能有一个参数。就是只会传进一个 int p参数 而不能传回 pthis
如果能传回的话,那个函数也没必要设计为 static了是吧。

比如说
Callback winProc( HWND hwnd, UING msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_ADDDRIVERS
CObject::SetP( wParam );
break;
}
}
在运行的时侯, 无论谁发出了WM_ADDDRIVERS 并且给出P
就把这个类的任何一个实例的PPP 设置为该值。
问题就在于那个 int PPP; 不是公共的,但是他们的值要一但执行了
CObject::SetP() 那么, 在运行状态下创建的所有CObject对象的 int PPP值都被改变了。
呵呵。
其实我已经有了自己的一种实现方法,在这里看看是不是有更好的方法。
dlqcsdn 2004-03-24
  • 打赏
  • 举报
回复
这样吧:
void caller(void (*pf)(void *,int),cobject* ,int);
class cobject
{
public:
cobject(){}
int ppp;
static void Setp(void * pthis,int p);
}
void cobject::Setp(void * pthis,int p)
{
cobject * pobj ;
pobj = (cobject *) p;
pobj->ppp = p;
}
cobject obj;
void caller(cobject::Setp,&obj,30);
oo 2004-03-24
  • 打赏
  • 举报
回复
写错了,‘指正’==》只能
oo 2004-03-24
  • 打赏
  • 举报
回复
static成员函数指正操作static成员变量,
不能操作非static成员变量。
qybao 2004-03-24
  • 打赏
  • 举报
回复
static int PPP;
这样可以吗
回调函数,你只需要传入该函数的入口地址就可以了吧

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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