静态变量和静态函数导致的问题

来源:互联网 发布:程序员用的头像 编辑:程序博客网 时间:2024/04/28 05:07

1.静态函数内部使用了外部非静态成员变量导致error C2228: left of '.push_back' must have class/struct/union type。
外部定义    typedef list<int>    intList;
    intList m_lstChannelInfos;
静态函数使用了该变量

2.静态变量未初始化导致link2001出错。


静态数据成员的使用方法和注意事项如下:

  1、静态数据成员在定义或说明时前面加关键字static。

  2、静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下:

    <数据类型><类名>::<静态数据成员名>=<值>

  这表明:

        (1) 初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆。

  (2) 初始化时不加该成员的访问权限控制符private,public等。

  (3) 初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。

  3、静态数据成员是静态存储的,它是静态生存期,必须对它进行初始化。

  4、引用静态数据成员时,采用如下格式:

   <类名>::<静态成员名>

如:

class Myclass
{
public:
Myclass(int a, int b, int c);
void GetNumber();
void GetSum();
private:
int A, B, C;
static int Sum;
};

int Myclass::Sum = 0;

一般的对象不能赋值的也要声明如
static XChannelFactory m_sChannelFactory ;
XChannelFactory XChannelFactory::m_sChannelFactory;