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

  • 相关阅读:
    Django-url反向解析和命名空间
    django-分页paginator
    python-命令模式
    python-访问者模式
    python-责任链模式
    python-备忘录模式
    最长无重复字串
    计算机网络常见面试题
    C++对象模型
    原码反码补码(转)
  • 原文地址:https://www.cnblogs.com/ll-10/p/5371055.html
Copyright © 2011-2022 走看看