您身边的网站建设专家
成功案例

【建站服务】高端!网站定制/设计/优化/二次开发/制作/搭建-东台高端网站建设-域名申请

日期: 2022-09-21 04:07:16 浏览数:3


上往建站提供服务器空间服务商百度快照排名网站托管百度推广运营,致力于设计外包服务与源代码定制开发360推广搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。


高端!网站定制/设计/优化/二次开发/制作/搭建-东台高端网站建设

网站建设.png

:init' : illegal call of non-static member function

结论 1:不能通过类名来调用类的非静态成员函数。

通过类的对象调用静态成员函数和非静态成员函数。

class Point  {  public:      void init()      {        }      static void output()      {      }  }; void main()  {      Point pt;      pt.init();      pt.output();  }

编译通过。

结论 2:类的对象可以使用静态成员函数和非静态成员函数。

在类的静态成员函数中使用类的非静态成员。

#include <stdio.h>  class Point  {  public:      void init()      {        }      static void output()      {          printf("%dn", m_x);      }  private:      int m_x;  };  void main()  {      Point pt;      pt.output();  }

编译出错:

error C2597: illegal reference to data member 'Point::m_x' in a static member function

因为静态成员函数属于整个类,在类实例化对象之前就已经分配空间了,而类的非静态成员必须在类实例化对象后才有内存空间,所以这个调用就出错了,就好比没有声明一个变量却提前使用它一样。

结论3:静态成员函数中不能引用非静态成员。

在类的非静态成员函数中使用类的静态成员。

class Point  {  public:      void init()      {            output();      }      static void output()      {      }  };  void main()  {      Point pt;  


 }  

};  

void main()  

{  

    Point pt;  

    Pt.init();

    pt.output();  

}

编译通过。


结论 4:类的非静态成员函数可以调用用静态成员函数,但反之不能。


使用类的静态成员变量。


#include <stdio.h>  

class Point  

{  

public:   

    Point()  

    {    

        m_nPointCount++;  

    }  

    ~Point()  

    {  

        m_nPointCount--;  

    }  

    static void output()  

    {  

        printf("%d ", m_nPointCount);  

    }  

private:  

    static int m_nPointCount;  

};  

void main()  

{  

    Point pt;  

    pt.output();  

}

按 Ctrl+F7 编译无错误,按 F7 生成 EXE 程序时报链接错误。


error LNK2001: unresolved external symbol "private: static int Point::m_nPointCount" (?m_nPointCount@Point@@0HA)

这是因为类的静态成员变量在使用前必须先初始化。


在 main() 函数前加上 int Point::m_nPointCount = 0; 再编译链接无错误,运行程序将输出 1。


结论 5:类的静态成员变量必须先初始化再使用。


思考总结:静态资源属于类,但是是独立于类存在的。从 J 类的加载机制的角度讲,静态资源是类初始化的时候加载的,而非静态资源是类实例化对象的时候加载的。 类的初始化早于类实例化对象,比如 Class.forName("xxx") 方法,就是初始化了一个类,但是并没有实例化对象,只是加载这个类的静态资源罢 了。所以对于静态资源来说,它是不可能知道一个类中有哪些非静态资源的;但是对于非静态资源来说就不一样了,由于它是实例化对象出来之后产生的,因此属于类的这些东西它都能认识。所以上面的几个问题答案就很明确了:


高端!网站定制/设计/优化/二次开发/制作/搭建-东台高端网站建设


上往建站提供搭建网站域名注册官网备案服务网店详情页设计企业网店专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管网页美工排版,致力于域名申请竞价托管软文推广全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机网站推广百度竞价托管网站建设上网建站推广服务网络公司有哪些等业务,专业团队服务,效果好。

服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)


全国咨询热线:400-111-6878

地址:全国各地都有驻点商务

Copyright © 2021 通陆科技

网站建设上往建站