读书人

static member variable 的初始化及使

发布时间: 2013-11-08 17:52:14 作者: rapoo

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;
}

读书人网 >C++

热点推荐