zoukankan      html  css  js  c++  java
  • 关于错误:非静态成员引用必须与特定对象相对

     1 #include<string>
     2 #include<iostream>
     3 using namespace std;
     4 class TextBlock
     5 {
     6 public:
     7     TextBlock():text("hello") {}
     8     const char& operator[](size_t position) const{ return text[position]; }
     9     char& operator[](size_t position){ return text[position]; }
    10 
    11     /* static */ void print(const TextBlock& tb){ cout << tb[0]; }
    12 private:
    13      string text;
    14 };
    15 
    16 int main()
    17 {
    18     TextBlock B;
    19 
    20     TextBlock::print(B);
    21     /* B.print(B); */
    22     system("pause");
    23 }

    在VS2013里输入以上代码会报错:非静态成员引用必须与特定对象相对。

    类的成员有两种:静态成员和实例成员(包括实例和函数)。实例成员的存储空间属于具体的实例,不同实例(对象)的同名成员拥有不同的存储空间;静态成员的存储空间是固定的,与具体的实例(对象)无关,被该类的所有实例共享。

    访问静态成员可以用ClassName::MemberName,也可以用ClassName.MemberNme,但最好用前者,因为很容易就可以判定成员是静态成员。

    访问实例成员只能用ClassName.MemberName,不能用ClassName::MemberName.

    本例中就是因为用ClassName::MemberName访问实例变量出错。

    所以解决方法是:将以上类的成员函数print声明为static。或者函数调用时用ClassName.MemberName的方式。

    详情:http://blog.csdn.net/shenqi67/article/details/7533094

  • 相关阅读:
    【项目】项目1
    Python脚本1
    Python基础24
    Python基础23(习惯)
    01-Spring(1)
    12-Shell(2)
    11-Shell(1)
    10-搭建EE环境
    09-常用指令(3)
    08-常用指令(2)
  • 原文地址:https://www.cnblogs.com/ll-10/p/5371055.html
Copyright © 2011-2022 走看看