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

static member variable 的初始化及使用,该如何处理

2013-11-08 
static member variable 的初始化及使用本帖最后由 shanwu1985 于 2013-11-03 22:34:52 编辑各位大牛好,  

static member variable 的初始化及使用
本帖最后由 shanwu1985 于 2013-11-03 22:34:52 编辑 各位大牛好,

    我在学 static member variable 的时候,不了解当 static member variable 是 private的属性时,该怎麽去做初始化的动作,所以就打算用 static member function 去做初始化…但下面这段代码不知道为何一直报错…

#include <string.h>
#include <stdio.h>
class car{
    private:
        char color[10];
        static int car_count;
    public:     
        // Constructor
        car(const char *a_color){
            car_count++;
            strcpy(color,a_color);
        }
        ~car(){car_count--;}
        static void init_car_count(){ car_count=0; }
        static int get_car_count(){ return car_count; } 
           
};


int main()
{
    car::init_car_count();
    car a("red");
    car b("blue");
    int num = car::get_car_count();
    printf("total cars:%d\n",num);
    return 0;
}


错误讯息为:
/tmp/ccSoSdJ3.o: In function `car::car(char const*)':
a.cpp:(.text._ZN3carC2EPKc[_ZN3carC5EPKc]+0x12): undefined reference to `car::car_count'
a.cpp:(.text._ZN3carC2EPKc[_ZN3carC5EPKc]+0x1b): undefined reference to `car::car_count'
/tmp/ccSoSdJ3.o: In function `car::~car()':
a.cpp:(.text._ZN3carD2Ev[_ZN3carD5Ev]+0xa): undefined reference to `car::car_count'
a.cpp:(.text._ZN3carD2Ev[_ZN3carD5Ev]+0x13): undefined reference to `car::car_count'
/tmp/ccSoSdJ3.o: In function `car::init_car_count()':
a.cpp:(.text._ZN3car14init_car_countEv[_ZN3car14init_car_countEv]+0x6): undefined reference to `car::car_count'
collect2: error: ld returned 1 exit status
shanwu@shanwu-laptop:~/c_c++_practice$ vim a.cpp 
shanwu@shanwu-laptop:~/c_c++_practice$ g++ -o a a.cpp
/tmp/ccuH53qO.o: In function `car::car(char const*)':
a.cpp:(.text._ZN3carC2EPKc[_ZN3carC5EPKc]+0x12): undefined reference to `car::car_count'
a.cpp:(.text._ZN3carC2EPKc[_ZN3carC5EPKc]+0x1b): undefined reference to `car::car_count'
/tmp/ccuH53qO.o: In function `car::~car()':
a.cpp:(.text._ZN3carD2Ev[_ZN3carD5Ev]+0xa): undefined reference to `car::car_count'
a.cpp:(.text._ZN3carD2Ev[_ZN3carD5Ev]+0x13): undefined reference to `car::car_count'
/tmp/ccuH53qO.o: In function `car::init_car_count()':
a.cpp:(.text._ZN3car14init_car_countEv[_ZN3car14init_car_countEv]+0x6): undefined reference to `car::car_count'
/tmp/ccuH53qO.o:a.cpp:(.text._ZN3car13get_car_countEv[_ZN3car13get_car_countEv]+0x6): more undefined references to `car::car_count' follow
collect2: error: ld returned 1 exit status
c++ static
[解决办法]
引用:
因为这个静态变量是 private 属性的,所以直接用 int car::car_count=0;就会报错了…

Quote: 引用:

在main()函数前面加一句:
int car::car_count=0;


就会报错了,lz试过没有呀,标准就是让我们这样初始化类静态成员变量的,不管是private、protected还是public的,建议lz去详细的看一看c++关于这方面的资料
[解决办法]
不会报错,编译完全正常:
class A
{
private:
static int a;
};

int A::a=3;
[解决办法]
也是不可以在构造函数里初始化吧!#7在类的外面初始化才是正确的。
int car:: car_count = 0;
静态成员函数和普通函数区别不大!只是没有this指针而已!
[解决办法]
#include <string.h>
#include <stdio.h>
class car{
    private:
        char color[10];
        static int car_count;
    public:     
        // Constructor
        car(const char *a_color){
            car_count++;
            strcpy(color,a_color);


        }
        ~car(){car_count--;}
        static void init_car_count(){ car_count=0; }
        static int get_car_count(){ return car_count; }             
};
 
int car::car_count = 1;
 
int main()
{
    car::init_car_count();
    car a("red");
    car b("blue");
    int num = car::get_car_count();
    printf("total cars:%d\n",num);
    return 0;
}

热点排行