• c++静态变量与菲静态变量


    刚开始用C++写程序,遇到了一个很奇怪的问题,就是在类定义的面定义了一个静态成员变量,但在使用时编译器报错称变量不是类的成员。

    文件a.h内容:

    /**********************A.h****************************/  

    #define A_H

    class A  

    {  

    static int num1;  

    int num2;  

        A();  

    }  

    #endif  

    文件a.c内容:

    /**************************a.c**************/  

    #include "a.h"

    void A::A()  

    {  

        num2=1;//正确

        num1=2;//报错

    }  

    编译 错误:undefined reference to `A::num2'。

    问题分析,对于a.h中的内容是不分配存储空间的,只是向编译器作出声明。对于num2,他是在实例化时分配内存的,而num1是一个静态成员,他在是在定义时就分配空间。

    num1=2;之所以会报错就是我们还没有定义,没有为他分配空间。

    /**********************A.h****************************/  

    #define A_H

    class A  

    {  

    static int num1;//这里只是声明,并没有定义

    int num2;//声明,在实例化时分配内存

        A();  

    }  

    #endif   

    /**************************a.c**************/  

    #include "a.h"

    int A::mun1;//定义,分配内存,以后A每一个对象(实例)的创建都不再分配内存

    void A::A()  

    {  

        num2=1;  

        num1=2; //不报错了

    }  

    黑洞@heidsoft
    Github:https://github.com/heidsoft
    微博:http://weibo.com/liuganbin
    热衷云计算和大数据
    关注CloudStack,OpenStack,Linux c/c++/python/java
    关注研究新技术
  • 相关阅读:
    11,Django组件分页器
    10,Django于ajax
    阿里云安装Nexus搭建Maven私有仓库
    maven 自动部署到tomcat
    linux 7.2 下安装maven
    小程序防止遮罩层穿透
    Linux 下安装JDK
    Linux 命令未自动提示补全
    nginx 、tomcat 集群配置、shiro Session 共享
    nginx负载均衡配置
  • 原文地址:https://www.cnblogs.com/heidsoft/p/3417221.html
Copyright © 2020-2023  润新知