首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

类中静态成员初始化的有关问题?

2013-11-25 
类中静态成员初始化的问题???class string{private:char *strint lenstatic int num//3static const in

类中静态成员初始化的问题???


class string
{
private:
    char *str;
    int len;
    static int num;               //3
    static const int LIMIT=100;   //4
public:
}

在类中不能初始化静态成员变量,可是第四行为啥就可以???
[解决办法]
因为一般class的申明都是放在头文件中的,如果允许类的静态变量的就地初始化(像你上述代码中的第三行就属于就地初始化),相当于在该头文件中定义一个非const变量,而变量默认的属性是外部链接,如果该头文件被多个文件包含,那么,这些文件的导出符号表中就会出现这个变量的导出符号,所以编译的时候会报错(多重定义了),所以C++不允许类的static静态变量的就地初始化,大概就是这样的,LZ可以去看下关于编译链接过程的知识,就清楚为什么要这么设计的了
[解决办法]

//可做如下测试。
#include <iostream>
class A
{
public:
static const int a = 10;
};

//const int A::a;

int main()
{
std::cout << &A::a << std::endl; //无法编译通过,会显示“undefined reference to A::a 的错误”
}
//上面的程序如果改成:
#include <iostream>
class A
{
public:
static const int a = 10;
};

const int A::a;

int main()
{
std::cout << &A::a << std::endl; //则编译,链接正常,并输出相应的地址值
}

热点排行