我有一个看起来像这样的课程:
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相关的错误,但是我无法重新创建它,所以我必须忘记这一点。
答案 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
的常量。