一个静态成员函数的问题!

djhdu 2002-01-08 05:54:16
我在类中定义了一个静态成员函数,其中,要返回一些数据,我定义了静态的成员变量,但是编译以后提示没有初始化静态成员变量,我有两个静态成员变量,一个是int temp,一个是char str[128],我在类的函数外可以用:int 类名::temp=0;初始化int类型的变量,但是char 的类型就没有办法初始化了。
我想问一下,还有什么办法从静态成员函数中返回数据,或者如何在类的成员函数以外初始化char类型的数组?
...全文
99 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcsongs 2002-01-09
  • 打赏
  • 举报
回复
such as:
class aa
{
public:
int cc; // note: not static
int bb;
char dd[20];
void f() { }
static void func(aa* pThis);
};

void aa::func(aa* pThis)
{
pThis->cc = 3; // direct access every class member
pThis->bb = 2;
strcpy(pThis->dd, "ssss");
pThis->f();
}
有时要求某函数是静态的. 比如一些和系统有关回调函数等...
采用这样的办法可以避免定义很多静态变量.
djhdu 2002-01-08
  • 打赏
  • 举报
回复
我试过在类外说明了,已经编译通过了,但是vcsongs说,可以传递一个this指针过去,怎么传递呢?兄弟再给我说一下!
djhdu 2002-01-08
  • 打赏
  • 举报
回复
我试一下
micr0soft 2002-01-08
  • 打赏
  • 举报
回复
哈哈,楼上的很有道理
hujun614 2002-01-08
  • 打赏
  • 举报
回复
类中定义的静态变量其实不是定义,而是说明,必须在外面定义的,同时可以初始化。呵呵.
如下例:
class aa{
static int cc; // 仅是说明,且不能用static int cc=1;因为这只是说明类中的静态成员变量
static int bb;
static char dd[20];
}

int aa::cc; //必须在外定义才可使用。也可初始化任何值。
int aa::bb=999;
int aa::dd[20]={"Pig"};
cqlzc 2002-01-08
  • 打赏
  • 举报
回复
int 型的静态成员函数如果不手工初始化,编译器在编译时,将其自动初始化为0。

howard 2002-01-08
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/topic/464/464120.shtm

帮帮我吧(网吧管理软件)

帮我UP一下也可以啊!!!
luckyegg 2002-01-08
  • 打赏
  • 举报
回复
贴代码出来。
vcsongs 2002-01-08
  • 打赏
  • 举报
回复
非静态函数之所以能够访问类对象中的数据, 是因为在它的参数表的后面, 由编译器给你传了一个this指针给函数. 对于你的静态函数, 完全可以传一个this 指针给它, 这样在它里面就可以直接访问类的任何一个成员函数/变量...
hollysky 2002-01-08
  • 打赏
  • 举报
回复
char Cls::str[128] = {NULL};
or
char Cls::str[128] = "strInit";

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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