C ++使用'this'作为参数

时间:2010-02-25 22:30:16

标签: c++

我有一个看起来像这样的课程:

class MeshClass
{
public:
    Anchor getAnchorPoint(x, y)
    {
      return Anchor( this, x, y );
    }
private:
    points[x*y];
}

我想创建另一个代表“锚”点的类,它可以访问网格并修改点,如下所示:

class Anchor
{
public:
    Anchor(&MeshClass, x, y)
    moveAnchor(x, y);
}

问题是,当我尝试在Anchor方法中使用MeshClass::getAnchorPoint时,类似于return Anchor(this, x, y),但因为this是const,我不能。作为一种解决方法,直到我弄明白这一点,我让Anchor接受对该点的引用并且moveAnchor直接移动该点。

编辑:问题很可能是我尝试使用参考文件时所做的事情。我改为使用像往常一样的指针,我可以传入this而没有来自编译器的抱怨。我几乎可以肯定我得到了一个与const相关的错误,但是我无法重新创建它,所以我必须忘记这一点。

4 个答案:

答案 0 :(得分:9)

在C ++中,这是一个指针,而不是一个引用。你可以这样做:

class Anchor; //forward declaration

class MeshClass
{
public:
    Anchor getAnchorPoint(int x, int y)
    {
        return Anchor(*this, x, y );
    }
private:
    int points[WIDTH*HEIGHT];
}

class Anchor
{
public:
    Anchor(MeshClass &mc, int x, int y);
}

答案 1 :(得分:2)

的常量不是问题。指针本身是const,而不是它指向的值。

你真正的问题在于:

class MeshClass
{
public:
    Anchor getAnchorPoint(x, y)
    { 
       return Anchor( *this, x, y );
    }
 private:
     points[x*y];
}

答案 2 :(得分:1)

为什么你认为this是const? this是一个指针,而不是一个引用。不应该是return Anchor( *this, x, y);

答案 3 :(得分:0)

在创建Anchor时,您可以将Anchor更改为接受const MeshClass&参数,还是将强制转换为(MeshClass)? 我不确定是否可以使用const_cast<MeshClass>(this)删除this的常量。