LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1604|回复: 9

类私有静态成员的访问问题!

[复制链接]
发表于 2003-8-13 00:15:03 | 显示全部楼层 |阅读模式
EG:
class A
{
   private:
            static const int LEN = 50;
    ...
   public:
            char * string_stl ();
}

char * A::string_stl ()
{
   char temp[A:EN];
   ...
}

为什么上面这个成员函数不能用char temp[LEN];来声明变量temp呢?
如果我用char temp[LEN];编译器出错,并说temp没有定义.LEN没有定义.
改成上面这样就没有问题!成员函数应该可以访问私有成员吧?不管是静态还是普通变量啊
?
我用的是g++编译器!


我只知道静态成员函数只能访问静态成员数据.
但不知道静态成员数据只能被静态成员函数访问!-------是不是这样?
发表于 2003-8-13 01:27:24 | 显示全部楼层
const static 定义只是在程序运行时起作用
在编译时不起作用

也就是说它们的值也是不可变的
但是去是在运行中不可变
这与define定义的宏不同
发表于 2003-8-13 03:04:06 | 显示全部楼层

我这里编译没有问题

编译的就是Andy84920贴出来的代码。楼主编译不过的原因是不是class A的声明后面漏了";"导致的?
发表于 2003-8-13 08:25:25 | 显示全部楼层
不要简单地相信编译器给出的提示,有时一些少了逗号之类的低级错误也会给出奇怪的提示。
 楼主| 发表于 2003-8-13 22:57:05 | 显示全部楼层
以下是一个人说的:
引用
"
你的LEN只有声明而无定义,在你的程序文件中加上对LEN的定义:
const int A:EN;


TO:     svenwang

我的代码本来就是对的.那个  ;  可能是我打上来时忘记了.不是这个问题.
我是问把
char temp[A:EN];
改成:
  char temp[LEN];
会出错.
为什么?
不过有的编译器(如VC)并不接受这样的语法,它们不允许一个static class member在声
明时就获得初值,遇到这种情况,可以把初值放在定义处,即:
在头文件中:
class A
{
    private:
             static const int LEN;
    ……
}

在实现文件中:
const int A:EN = 50;

char * A::string_stl ()
{
    char temp[LEN];
}

这样就没问题了。

但有时这种方法也不行,这时就只能用所谓的enum特殊技法,例如:
class A
{
    private:
        enum { LEN = 5 };
        char string[LEN];
    ……
}

"
是不是这样???
 楼主| 发表于 2003-8-13 23:00:49 | 显示全部楼层
TO: 无双
版主

那 static const int LEN = 50;在编译时将作何解释呢?
发表于 2003-8-13 23:01:50 | 显示全部楼层
早期的编译器可能会有这种问题。现在的,应该没有问题啦。g++是没有这个问题的。
 楼主| 发表于 2003-8-13 23:06:26 | 显示全部楼层
[root@localhost admin]# g++ -v
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --host=i386-redhat-linux
Thread model: posix
gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)

应该不会有问题吧???
但我就是用这个版本进行编译的呀!出问题了!
发表于 2003-8-13 23:47:35 | 显示全部楼层
我用dev-c++的g++没问题
发表于 2003-8-14 08:35:55 | 显示全部楼层
Andy84920兄,你干脆把源程序贴上来得啦。我相信是你这个个在犯错误,而不是编译器。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表