在c ++中使用关键字“this”时出现意外错误

时间:2016-05-08 12:06:50

标签: c++

我有一个名为Area的类,当我创建一个Area对象时,我需要保留它的地址。所以在Area的构造函数中我使用以下命令:

Area *p = this->Area;

我得到一个错误说:

  

“无效使用Area :: Area”。

知道出了什么问题?

2 个答案:

答案 0 :(得分:1)

this已经是指向该对象的指针。所以你应该做这样的事情:

Area *p = this;

this指针是所有成员函数(非静态成员)的隐式参数。因此,在成员函数内部,这可以用于引用调用对象。

答案 1 :(得分:0)

  

我创建了一个我需要保留其地址的Area对象。

可以在ctor的初始化列表中初始化self-reference和self-ptr。 (并且在方法中也很容易)

class Area
{
private:
    Area& selfRef;  // size is 8 bytes
    Area* selfPtr;  // size is 8 bytes - but why bother, just use this
    char  data[1000]; // size is 1000 bytes

public:
   Area() : selfRef(*this), selfPtr(this)
      {
          for (int i=0; i<1000; ++i) data[i] = 0; // initialize data  
      }; 

   void foo() {
      // easy to do in a method:
      Area& localSelfRef = *this;  // 8 bytes
      // ...
      localSelfRef.bar();  // instead of ptr
      this->bar();         // direct use of this ptr
      selfRef.bar();       // use of class initialized selfRef
   }

   void bar() { 
      // ...
   }

}

班级大小是1000多字节。

selfPtr和SelfRef以及localSelfRef每个都是8个字节(在我的系统上)。